This is an automated email from the ASF dual-hosted git repository.

francischuang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/calcite-site.git


The following commit(s) were added to refs/heads/master by this push:
     new 86a9751  Switch PMC Chair to Stamatis Zampetakis and regenerate site
86a9751 is described below

commit 86a9751a303872bad8b062b0a727a3375ad9eaa7
Author: Francis Chuang <[email protected]>
AuthorDate: Thu Dec 19 08:42:48 2019 +1100

    Switch PMC Chair to Stamatis Zampetakis and regenerate site
---
 community/index.html                      |   6 +-
 develop/index.html                        |   2 +-
 docs/adapter.html                         |  10 +-
 docs/algebra.html                         |   1 +
 docs/elasticsearch_adapter.html           |   6 +-
 docs/howto.html                           | 379 ++++++++++++++++++------------
 docs/index.html                           |   1 +
 docs/lattice.html                         |  40 +++-
 docs/reference.html                       |  26 +-
 docs/tutorial.html                        |  68 ++++--
 news/2019/09/11/release-1.21.0/index.html |   2 +-
 news/index.html                           |   2 +-
 news/releases/index.html                  |   2 +-
 13 files changed, 323 insertions(+), 222 deletions(-)

diff --git a/community/index.html b/community/index.html
index e7b56a7..81b91be 100644
--- a/community/index.html
+++ b/community/index.html
@@ -155,7 +155,7 @@
       <td style="text-align: left">Francis Chuang (<a 
href="https://people.apache.org/phonebook.html?uid=francischuang";>francischuang</a>)</td>
       <td style="text-align: left"><a href="https://github.com/F21";><img 
width="64" src="https://github.com/F21.png"; /></a></td>
       <td style="text-align: left">Boostport</td>
-      <td style="text-align: left">PMC Chair</td>
+      <td style="text-align: left">PMC</td>
     </tr>
     <tr>
       <td style="text-align: left">Gian Merlino (<a 
href="https://people.apache.org/phonebook.html?uid=gian";>gian</a>)</td>
@@ -314,10 +314,10 @@
       <td style="text-align: left">Committer</td>
     </tr>
     <tr>
-      <td style="text-align: left">Stamatis Zampetakis (<a 
href="https://people.apache.org/phonebook.html?uid=zabetak";>zabetak</a>)</td>
+      <td style="text-align: left"><a 
href="https://people.apache.org/~zabetak/";>Stamatis Zampetakis</a> (<a 
href="https://people.apache.org/phonebook.html?uid=zabetak";>zabetak</a>)</td>
       <td style="text-align: left"><a href="https://github.com/zabetak";><img 
width="64" src="https://github.com/zabetak.png"; /></a></td>
       <td style="text-align: left">TIBCO</td>
-      <td style="text-align: left">PMC</td>
+      <td style="text-align: left">PMC Chair</td>
     </tr>
     <tr>
       <td style="text-align: left">Steven Noels (<a 
href="https://people.apache.org/phonebook.html?uid=stevenn";>stevenn</a>)</td>
diff --git a/develop/index.html b/develop/index.html
index 54944a6..709228d 100644
--- a/develop/index.html
+++ b/develop/index.html
@@ -182,7 +182,7 @@ the contributor(s) involved in the discussion should:</p>
 <p>Commit your change to your branch, and use a comment that starts with
 the JIRA case number, like this:</p>
 
-<figure class="highlight"><pre><code class="language-text" 
data-lang="text">[CALCITE-345] AssertionError in RexToLixTranslator comparing 
to date literal</code></pre></figure>
+<figure class="highlight"><pre><code class="language-text" 
data-lang="text">[CALCITE-345] AssertionError in RexToLixTranslator comparing 
to date literal (FirstName LastName)</code></pre></figure>
 
 <p>If your change had multiple commits, use <code 
class="highlighter-rouge">git rebase -i master</code> to
 squash them into a single commit, and to bring your code up to date
diff --git a/docs/adapter.html b/docs/adapter.html
index ad2e1e1..a0fc73a 100644
--- a/docs/adapter.html
+++ b/docs/adapter.html
@@ -322,11 +322,14 @@ Here is an example using the <code 
class="highlighter-rouge">sqlline</code> shel
 <span class="o">&gt;</span> <span class="k">CREATE</span> <span 
class="k">VIEW</span> <span class="n">v</span> <span class="k">AS</span> <span 
class="k">SELECT</span> <span class="o">*</span> <span class="k">FROM</span> 
<span class="n">t</span> <span class="k">WHERE</span> <span class="n">i</span> 
<span class="o">&gt;</span> <span class="mi">1</span><span class="p">;</span>
 <span class="k">No</span> <span class="k">rows</span> <span 
class="n">affected</span> <span class="p">(</span><span 
class="mi">0</span><span class="p">.</span><span class="mi">072</span> <span 
class="n">seconds</span><span class="p">)</span>
 <span class="o">&gt;</span> <span class="k">SELECT</span> <span 
class="k">count</span><span class="p">(</span><span class="o">*</span><span 
class="p">)</span> <span class="k">FROM</span> <span class="n">v</span><span 
class="p">;</span>
-<span class="o">+</span><span class="c1">---------------------+</span>
+<span class="o">+</span><span class="c1">---------------------+
+</span>
 <span class="o">|</span>       <span class="n">EXPR</span><span 
class="err">$</span><span class="mi">0</span>        <span class="o">|</span>
-<span class="o">+</span><span class="c1">---------------------+</span>
+<span class="o">+</span><span class="c1">---------------------+
+</span>
 <span class="o">|</span> <span class="mi">1</span>                   <span 
class="o">|</span>
-<span class="o">+</span><span class="c1">---------------------+</span>
+<span class="o">+</span><span class="c1">---------------------+
+</span>
 <span class="mi">1</span> <span class="k">row</span> <span 
class="n">selected</span> <span class="p">(</span><span 
class="mi">0</span><span class="p">.</span><span class="mi">148</span> <span 
class="n">seconds</span><span class="p">)</span>
 <span class="o">&gt;</span> <span class="o">!</span><span 
class="n">quit</span></code></pre></figure>
 
@@ -752,6 +755,7 @@ providers and maintains a cache so that a given piece of 
metadata (for example
 the selectivity of the condition <code class="highlighter-rouge">x &gt; 
10</code> in a particular <code class="highlighter-rouge">Filter</code> 
operator)
 is computed only once.</p>
 
+
           
 
 
diff --git a/docs/algebra.html b/docs/algebra.html
index b9e1251..a3a1efc 100644
--- a/docs/algebra.html
+++ b/docs/algebra.html
@@ -805,6 +805,7 @@ added to the stack.</p>
   </tbody>
 </table>
 
+
           
 
 
diff --git a/docs/elasticsearch_adapter.html b/docs/elasticsearch_adapter.html
index 6012a74..b2fd2e3 100644
--- a/docs/elasticsearch_adapter.html
+++ b/docs/elasticsearch_adapter.html
@@ -118,14 +118,13 @@ follows:</p>
 <figure class="highlight"><pre><code class="language-bash" 
data-lang="bash"><span class="nv">$ </span>./sqlline
 sqlline&gt; <span class="o">!</span>connect jdbc:calcite:model<span 
class="o">=</span>model.json admin admin</code></pre></figure>
 
-<p>You can also specify the index name and path prefix that is represented by 
the <code class="highlighter-rouge">index</code> and <code 
class="highlighter-rouge">pathPrefix</code> parameter in the model 
definition:</p>
+<p>You can also specify the index name that is represented by the <code 
class="highlighter-rouge">index</code> parameter in the model definition:</p>
 
 <figure class="highlight"><pre><code class="language-json" 
data-lang="json"><span class="err">...</span><span class="w">
 
       </span><span class="s2">"operand"</span><span class="p">:</span><span 
class="w"> </span><span class="p">{</span><span class="w">
         </span><span class="s2">"coordinates"</span><span 
class="p">:</span><span class="w"> </span><span class="s2">"{'127.0.0.1': 
9200}"</span><span class="p">,</span><span class="w">
-        </span><span class="s2">"index"</span><span class="p">:</span><span 
class="w"> </span><span class="s2">"usa"</span><span class="p">,</span><span 
class="w">
-        </span><span class="s2">"pathPrefix"</span><span 
class="p">:</span><span class="w"> </span><span class="s2">"path"</span><span 
class="w">
+        </span><span class="s2">"index"</span><span class="p">:</span><span 
class="w"> </span><span class="s2">"usa"</span><span class="w">
       </span><span class="p">}</span><span class="w">
 
 </span><span class="err">...</span></code></pre></figure>
@@ -202,6 +201,7 @@ scroll is automatically cleared (removed) when all query 
resuts are consumed.</p
 we try to follow official <a href="https://www.elastic.co/support/eol";>support 
schedule</a>.
 Also, types are not supported (this adapter only supports indices).</p>
 
+
           
 
 
diff --git a/docs/howto.html b/docs/howto.html
index 38b249c..5c53f99 100644
--- a/docs/howto.html
+++ b/docs/howto.html
@@ -86,8 +86,8 @@ adapters.</p>
 
 <ul id="markdown-toc">
   <li><a href="#building-from-a-source-distribution" 
id="markdown-toc-building-from-a-source-distribution">Building from a source 
distribution</a></li>
-  <li><a href="#building-from-git" 
id="markdown-toc-building-from-git">Building from Git</a></li>
-  <li><a href="#gradle-vs-gradle-wrapper" 
id="markdown-toc-gradle-vs-gradle-wrapper">Gradle vs Gradle wrapper</a></li>
+  <li><a href="#building-from-git" 
id="markdown-toc-building-from-git">Building from git</a></li>
+  <li><a href="#if-you-already-have-apache-maven" 
id="markdown-toc-if-you-already-have-apache-maven">If you already have Apache 
Maven</a></li>
   <li><a href="#running-tests" id="markdown-toc-running-tests">Running 
tests</a></li>
   <li><a href="#running-integration-tests" 
id="markdown-toc-running-integration-tests">Running integration tests</a>    
<ul>
       <li><a href="#vm-preparation" id="markdown-toc-vm-preparation">VM 
preparation</a></li>
@@ -120,22 +120,13 @@ adapters.</p>
   <li><a href="#advanced-topics-for-committers" 
id="markdown-toc-advanced-topics-for-committers">Advanced topics for 
committers</a>    <ul>
       <li><a href="#merging-pull-requests-for-calcite-committers" 
id="markdown-toc-merging-pull-requests-for-calcite-committers">Merging pull 
requests (for Calcite committers)</a></li>
       <li><a href="#set-up-pgp-signing-keys-for-calcite-committers" 
id="markdown-toc-set-up-pgp-signing-keys-for-calcite-committers">Set up PGP 
signing keys (for Calcite committers)</a></li>
-      <li><a 
href="#set-up-nexus-repository-credentials-for-calcite-committers" 
id="markdown-toc-set-up-nexus-repository-credentials-for-calcite-committers">Set
 up Nexus repository credentials (for Calcite committers)</a></li>
+      <li><a 
href="#set-up-maven-repository-credentials-for-calcite-committers" 
id="markdown-toc-set-up-maven-repository-credentials-for-calcite-committers">Set
 up Maven repository credentials (for Calcite committers)</a></li>
       <li><a href="#making-a-snapshot-for-calcite-committers" 
id="markdown-toc-making-a-snapshot-for-calcite-committers">Making a snapshot 
(for Calcite committers)</a></li>
-      <li><a href="#making-a-release-candidate-for-calcite-committers" 
id="markdown-toc-making-a-release-candidate-for-calcite-committers">Making a 
release candidate (for Calcite committers)</a>        <ul>
-          <li><a 
href="#to-prepare-a-release-candidate-directly-in-your-environment" 
id="markdown-toc-to-prepare-a-release-candidate-directly-in-your-environment">To
 prepare a release candidate directly in your environment:</a>            <ul>
-              <li><a href="#checking-the-artifacts" 
id="markdown-toc-checking-the-artifacts">Checking the artifacts</a></li>
-            </ul>
-          </li>
-        </ul>
-      </li>
+      <li><a href="#making-a-release-for-calcite-committers" 
id="markdown-toc-making-a-release-for-calcite-committers">Making a release (for 
Calcite committers)</a></li>
       <li><a 
href="#cleaning-up-after-a-failed-release-attempt-for-calcite-committers" 
id="markdown-toc-cleaning-up-after-a-failed-release-attempt-for-calcite-committers">Cleaning
 up after a failed release attempt (for Calcite committers)</a></li>
       <li><a href="#validate-a-release" 
id="markdown-toc-validate-a-release">Validate a release</a></li>
       <li><a 
href="#get-approval-for-a-release-via-apache-voting-process-for-calcite-committers"
 
id="markdown-toc-get-approval-for-a-release-via-apache-voting-process-for-calcite-committers">Get
 approval for a release via Apache voting process (for Calcite 
committers)</a></li>
-      <li><a href="#publishing-a-release-for-calcite-committers" 
id="markdown-toc-publishing-a-release-for-calcite-committers">Publishing a 
release (for Calcite committers)</a>        <ul>
-          <li><a href="#publishing-directly-in-your-environment" 
id="markdown-toc-publishing-directly-in-your-environment">Publishing directly 
in your environment:</a></li>
-        </ul>
-      </li>
+      <li><a href="#publishing-a-release-for-calcite-committers" 
id="markdown-toc-publishing-a-release-for-calcite-committers">Publishing a 
release (for Calcite committers)</a></li>
       <li><a href="#publish-the-web-site" 
id="markdown-toc-publish-the-web-site">Publishing the web site (for Calcite 
committers)</a></li>
     </ul>
   </li>
@@ -143,7 +134,7 @@ adapters.</p>
 
 <h2 id="building-from-a-source-distribution">Building from a source 
distribution</h2>
 
-<p>Prerequisite is Java (JDK 8, 9, 10, 11, 12, or 13) on your path.</p>
+<p>Prerequisite is Java (JDK 8, 9, 10, 11, or 12) on your path.</p>
 
 <p>Unpack the source distribution <code 
class="highlighter-rouge">.tar.gz</code> file,
 <code class="highlighter-rouge">cd</code> to the root directory of the 
unpacked source,
@@ -151,15 +142,15 @@ then build using the included maven wrapper:</p>
 
 <figure class="highlight"><pre><code class="language-bash" 
data-lang="bash"><span class="nv">$ </span><span class="nb">tar </span>xvfz 
calcite-1.21.0-source.tar.gz
 <span class="nv">$ </span><span class="nb">cd </span>calcite-1.21.0
-<span class="nv">$ </span>./gradlew build</code></pre></figure>
+<span class="nv">$ </span>./mvnw install</code></pre></figure>
 
 <p><a href="#running-tests">Running tests</a> describes how to run more or 
fewer
 tests.</p>
 
-<h2 id="building-from-git">Building from Git</h2>
+<h2 id="building-from-git">Building from git</h2>
 
 <p>Prerequisites are git
-and Java (JDK 8, 9, 10, 11, 12, or 13) on your path.</p>
+and Java (JDK 8, 9, 10, 11, or 12) on your path.</p>
 
 <p>Create a local copy of the github repository,
 <code class="highlighter-rouge">cd</code> to its root directory,
@@ -167,43 +158,38 @@ then build using the included maven wrapper:</p>
 
 <figure class="highlight"><pre><code class="language-bash" 
data-lang="bash"><span class="nv">$ </span>git clone 
git://github.com/apache/calcite.git
 <span class="nv">$ </span><span class="nb">cd </span>calcite
-<span class="nv">$ </span>./gradlew build</code></pre></figure>
+<span class="nv">$ </span>./mvnw install</code></pre></figure>
 
 <p>Calcite includes a number of machine-generated codes. By default, these are
 regenerated on every build, but this has the negative side-effect of causing
 a re-compilation of the entire project when the non-machine-generated code
-has not changed.</p>
+has not changed. To make sure incremental compilation still works as intended,
+provide the <code class="highlighter-rouge">skipGenerate</code> command line 
option with your maven command.
+If you invoke the <code class="highlighter-rouge">clean</code> lifecycle 
phase, you must not specify the
+<code class="highlighter-rouge">skipGenerate</code> option as it will not 
recompile the necessary code for the build
+to succeed.</p>
 
-<p>Typically re-generation is called automatically when the relevant templates
-are changed, and it should work transparently.
-However if your IDE does not generate sources (e.g. <code 
class="highlighter-rouge">core/build/javacc/javaCCMain/org/apache/calcite/sql/parser/impl/SqlParserImpl.java</code>),
-then you can call <code class="highlighter-rouge">./gradlew 
generateSources</code> tasks manually.</p>
+<figure class="highlight"><pre><code class="language-bash" 
data-lang="bash"><span class="nv">$ </span>mvn clean
+<span class="nv">$ </span>mvn package
+... hacks ...
+<span class="nv">$ </span>mvn package <span 
class="nt">-DskipGenerate</span></code></pre></figure>
 
 <p><a href="#running-tests">Running tests</a> describes how to run more or 
fewer
 tests.</p>
 
-<h2 id="gradle-vs-gradle-wrapper">Gradle vs Gradle wrapper</h2>
+<h2 id="if-you-already-have-apache-maven">If you already have Apache Maven</h2>
 
-<p>Calcite uses Gradle wrapper to make a consistent build environment.
-In the typical case you don’t need to install Gradle manually, and
-<code class="highlighter-rouge">./gradlew</code> would download the proper 
version for you and verify the expected checksum.</p>
-
-<p>You can install Gradle manually, however please note that there might
-be impedance mismatch between different versions.</p>
+<p>If you have already installed Maven and it is on your path, then you
+can use <code class="highlighter-rouge">mvn</code> rather than <code 
class="highlighter-rouge">./mvnw</code> in commands. You need Maven version
+3.5.2 or later.</p>
 
 <h2 id="running-tests">Running tests</h2>
 
 <p>The test suite will run by default when you build, unless you specify
-<code class="highlighter-rouge">-x test</code></p>
-
-<figure class="highlight"><pre><code class="language-bash" 
data-lang="bash"><span class="nv">$ </span>./gradlew assemble <span class="c"># 
build the artifacts</span>
-<span class="nv">$ </span>./gradlew build <span class="nt">-x</span> <span 
class="nb">test</span> <span class="c"># build the artifacts, verify code 
style, skip tests</span>
-<span class="nv">$ </span>./gradlew check <span class="c"># verify code style, 
execute tests</span>
-<span class="nv">$ </span>./gradlew <span class="nb">test</span> <span 
class="c"># execute tests</span>
-<span class="nv">$ </span>./gradlew style <span class="c"># update code 
formatting (for auto-correctable cases) and verify style</span>
-<span class="nv">$ </span>./gradlew spotlessCheck checkstyleAll <span 
class="c"># report code style violations</span></code></pre></figure>
+<code class="highlighter-rouge">-DskipTests</code>:</p>
 
-<p>You can use <code class="highlighter-rouge">./gradlew assemble</code> to 
build the artifacts and skip all tests and verifications.</p>
+<figure class="highlight"><pre><code class="language-bash" 
data-lang="bash"><span class="nv">$ </span>./mvnw <span 
class="nt">-DskipTests</span> clean install
+<span class="nv">$ </span>./mvnw <span 
class="nb">test</span></code></pre></figure>
 
 <p>There are other options that control which tests are run, and in what
 environment, as follows.</p>
@@ -229,20 +215,6 @@ in-memory and run tests from those benchmarks.</li>
 Splunk must be installed and running.</li>
 </ul>
 
-<p>Note: tests are executed in a forked JVM, so system properties are not 
passed automatically
-when running tests with Gradle.
-By default, the build script passes the following <code 
class="highlighter-rouge">-D...</code> properties
-(see <code class="highlighter-rouge">passProperty</code> in <code 
class="highlighter-rouge">build.gradle.kts</code>):</p>
-
-<ul>
-  <li><code class="highlighter-rouge">java.awt.headless</code></li>
-  <li><code 
class="highlighter-rouge">junit.jupiter.execution.parallel.enabled</code>, 
default: <code class="highlighter-rouge">true</code></li>
-  <li><code 
class="highlighter-rouge">junit.jupiter.execution.timeout.default</code>, 
default: <code class="highlighter-rouge">5 m</code></li>
-  <li><code class="highlighter-rouge">user.language</code>, default: <code 
class="highlighter-rouge">TR</code></li>
-  <li><code class="highlighter-rouge">user.country</code>, default: <code 
class="highlighter-rouge">tr</code></li>
-  <li><code class="highlighter-rouge">calcite.**</code> (to enable <code 
class="highlighter-rouge">calcite.test.db</code> and others above)</li>
-</ul>
-
 <h2 id="running-integration-tests">Running integration tests</h2>
 
 <p>For testing Calcite’s external adapters, a test virtual machine should be 
used.
@@ -283,18 +255,17 @@ The connection strings for different databases are listed 
in <a href="https://gi
 <p>Command line:</p>
 
 <ul>
-  <li>Executing regular unit tests (does not require external data): no 
change. <code class="highlighter-rouge">./gradlew test</code> or <code 
class="highlighter-rouge">./gradlew build</code>.</li>
-  <li>Executing all tests, for all the DBs: <code 
class="highlighter-rouge">./gradlew test integTestAll</code>.</li>
-  <li>Executing just tests for external DBs, excluding unit tests: <code 
class="highlighter-rouge">./gradlew integTestAll</code></li>
-  <li>Executing PostgreSQL JDBC tests: <code 
class="highlighter-rouge">./gradlew integTestPostgresql</code></li>
-  <li>Executing just MongoDB tests: <code class="highlighter-rouge">./gradlew 
:mongo:build</code></li>
+  <li>Executing regular unit tests (does not require external data): no 
change. <code class="highlighter-rouge">mvn test</code> or <code 
class="highlighter-rouge">mvn install</code>.</li>
+  <li>Executing all tests, for all the DBs: <code 
class="highlighter-rouge">mvn verify -Pit</code>. <code 
class="highlighter-rouge">it</code> stands for “integration-test”. <code 
class="highlighter-rouge">mvn install -Pit</code> works as well.</li>
+  <li>Executing just tests for external DBs, excluding unit tests: <code 
class="highlighter-rouge">mvn -Dtest=foo -DfailIfNoTests=false -Pit 
verify</code></li>
+  <li>Executing just MongoDB tests: <code class="highlighter-rouge">cd mongo; 
mvn verify -Pit</code></li>
 </ul>
 
 <p>From within IDE:</p>
 
 <ul>
   <li>Executing regular unit tests: no change.</li>
-  <li>Executing MongoDB tests: run <code 
class="highlighter-rouge">MongoAdapterTest.java</code> with <code 
class="highlighter-rouge">calcite.integrationTest=true</code> system 
property</li>
+  <li>Executing MongoDB tests: run <code 
class="highlighter-rouge">MongoAdapterIT.java</code> as usual (no additional 
properties are required)</li>
   <li>Executing MySQL tests: run <code 
class="highlighter-rouge">JdbcTest</code> and <code 
class="highlighter-rouge">JdbcAdapterTest</code> with setting <code 
class="highlighter-rouge">-Dcalcite.test.db=mysql</code></li>
   <li>Executing PostgreSQL tests: run <code 
class="highlighter-rouge">JdbcTest</code> and <code 
class="highlighter-rouge">JdbcAdapterTest</code> with setting <code 
class="highlighter-rouge">-Dcalcite.test.db=postgresql</code></li>
 </ul>
@@ -322,10 +293,10 @@ Integration tests should be named <code 
class="highlighter-rouge">...IT.java</co
 
 <p>Start with <a href="#building-from-a-source-distribution">building Calcite 
from the command line</a>.</p>
 
-<p>Go to <em>File &gt; Open…</em> and open up Calcite’s root <code 
class="highlighter-rouge">build.gradle.kts</code> file.
+<p>Go to <em>File &gt; Open…</em> and open up Calcite’s <code 
class="highlighter-rouge">pom.xml</code> file.
 When IntelliJ asks if you want to open it as a project or a file, select 
project.
 Also, say yes when it asks if you want a new window.
-IntelliJ’s Gradle project importer should handle the rest.</p>
+IntelliJ’s Maven project importer should handle the rest.</p>
 
 <p>There is a partially implemented IntelliJ code style configuration that you 
can import located <a 
href="https://gist.github.com/gianm/27a4e3cad99d7b9b6513b6885d3cfcc9";>on 
GitHub</a>.
 It does not do everything needed to make Calcite’s style checker happy, but
@@ -337,9 +308,18 @@ then <em>Import Scheme &gt; IntelliJ IDEA Code Style 
XML</em>.</p>
 For example, navigate to the method <code 
class="highlighter-rouge">JdbcTest.testWinAgg</code> with
 <em>Navigate &gt; Symbol</em> and enter <code 
class="highlighter-rouge">testWinAgg</code>. Run <code 
class="highlighter-rouge">testWinAgg</code> by right-clicking and selecting 
<em>Run</em> (or the equivalent keyboard shortcut).</p>
 
+<p>If you encounter an error while running the <code 
class="highlighter-rouge">JdbcTest.testWinAgg</code> , run the following Maven 
command from the command line:</p>
+
+<p><code class="highlighter-rouge">$ ./mvnw -DskipTests clean 
install</code></p>
+
+<p>You should see <code class="highlighter-rouge">"BUILD SUCCESS"</code>.</p>
+
+<p>Once that is complete, proceed with running <code 
class="highlighter-rouge">JdbcTest.testWinAgg</code>.</p>
+
 <h3 id="setting-up-netbeans">Setting up NetBeans</h3>
 
-<p>From the main menu, select <em>File &gt; Open Project</em> and navigate to 
a name of the project (Calcite) with a small Gradle icon, and choose to open.
+<p>From the main menu, select <em>File &gt; Open Project</em> and navigate to 
a name of the project (Calcite) with a small Maven icon, and choose to open.
+(See <a 
href="https://www.packtpub.com/mapt/book/application_development/9781785286124/2/ch02lvl1sec23/importing-an-existing-maven-project-in-netbeans";>this
 tutorial</a> for an example of how to open a Maven project)
 Wait for NetBeans to finish importing all dependencies.</p>
 
 <p>To ensure that the project is configured successfully, navigate to the 
method <code class="highlighter-rouge">testWinAgg</code> in <code 
class="highlighter-rouge">org.apache.calcite.test.JdbcTest</code>.
@@ -347,10 +327,6 @@ Right-click on the method and select to <em>Run Focused 
Test Method</em>.
 NetBeans will run a Maven process, and you should see in the command output 
window a line with
  <code class="highlighter-rouge">Running 
org.apache.calcite.test.JdbcTest</code> followed by <code 
class="highlighter-rouge">"BUILD SUCCESS"</code>.</p>
 
-<p>Note: it is not clear if NetBeans automatically generates relevant sources 
on project import,
-so you might need to run <code class="highlighter-rouge">./gradlew 
generateSources</code> before importing the project (and when you
-update template parser sources, and project version)</p>
-
 <h2 id="tracing">Tracing</h2>
 
 <p>To enable tracing, add the following flags to the java command line:</p>
@@ -370,9 +346,11 @@ You can modify the level for the rootLogger to increase 
verbosity or change the
 for a specific class if you so choose.</p>
 
 <figure class="highlight"><pre><code class="language-properties" 
data-lang="properties"><span class="c"># Change rootLogger level to WARN
-</span><span class="py">log4j.rootLogger</span><span class="p">=</span><span 
class="s">WARN, A1</span>
+</span><span class="py">log4j.rootLogger</span><span class="p">=</span><span 
class="s">WARN, A1
+</span>
 <span class="c"># Increase level to DEBUG for RelOptPlanner
-</span><span 
class="py">log4j.logger.org.apache.calcite.plan.RelOptPlanner</span><span 
class="p">=</span><span class="s">DEBUG</span>
+</span><span 
class="py">log4j.logger.org.apache.calcite.plan.RelOptPlanner</span><span 
class="p">=</span><span class="s">DEBUG
+</span>
 <span class="c"># Increase level to TRACE for HepPlanner
 </span><span 
class="py">log4j.logger.org.apache.calcite.plan.hep.HepPlanner</span><span 
class="p">=</span><span class="s">TRACE</span></code></pre></figure>
 
@@ -431,8 +409,8 @@ connecting to: <span class="nb">test</span>
 Calcite model:</p>
 
 <figure class="highlight"><pre><code class="language-bash" 
data-lang="bash"><span class="nv">$ </span>./sqlline
-sqlline&gt; <span class="o">!</span>connect jdbc:calcite:model<span 
class="o">=</span>mongodb/src/test/resources/mongo-model.json admin admin
-Connecting to jdbc:calcite:model<span 
class="o">=</span>mongodb/src/test/resources/mongo-model.json
+sqlline&gt; <span class="o">!</span>connect jdbc:calcite:model<span 
class="o">=</span>mongodb/target/test-classes/mongo-model.json admin admin
+Connecting to jdbc:calcite:model<span 
class="o">=</span>mongodb/target/test-classes/mongo-model.json
 Connected to: Calcite <span class="o">(</span>version 1.x.x<span 
class="o">)</span>
 Driver: Calcite JDBC Driver <span class="o">(</span>version 1.x.x<span 
class="o">)</span>
 Autocommit status: <span class="nb">true
@@ -479,13 +457,15 @@ queries. It is also necessary if you intend to run the 
test suite, using
 <span class="kd">public</span> <span class="kd">class</span> <span 
class="nc">AdapterContext</span> <span class="kd">implements</span> <span 
class="n">CalcitePrepare</span><span class="o">.</span><span 
class="na">Context</span> <span class="o">{</span>
   <span class="nd">@Override</span>
   <span class="kd">public</span> <span class="n">JavaTypeFactory</span> <span 
class="nf">getTypeFactory</span><span class="o">()</span> <span 
class="o">{</span>
-    <span class="c1">// adapter implementation</span>
+    <span class="c1">// adapter implementation
+</span>
     <span class="k">return</span> <span class="n">typeFactory</span><span 
class="o">;</span>
   <span class="o">}</span>
 
   <span class="nd">@Override</span>
   <span class="kd">public</span> <span class="n">CalciteSchema</span> <span 
class="nf">getRootSchema</span><span class="o">()</span> <span 
class="o">{</span>
-    <span class="c1">// adapter implementation</span>
+    <span class="c1">// adapter implementation
+</span>
     <span class="k">return</span> <span class="n">rootSchema</span><span 
class="o">;</span>
   <span class="o">}</span>
 <span class="o">}</span></code></pre></figure>
@@ -513,7 +493,8 @@ specific implementation.</p>
     <span class="n">CalcitePrepare</span><span class="o">.</span><span 
class="na">PrepareResult</span><span class="o">&lt;</span><span 
class="n">Object</span><span class="o">&gt;</span> <span 
class="n">prepared</span> <span class="o">=</span>
         <span class="k">new</span> <span 
class="nf">CalcitePrepareImpl</span><span class="o">().</span><span 
class="na">prepareSql</span><span class="o">(</span><span 
class="n">ctx</span><span class="o">,</span> <span class="n">sql</span><span 
class="o">,</span> <span class="kc">null</span><span class="o">,</span> <span 
class="n">elementType</span><span class="o">,</span> <span 
class="o">-</span><span class="mi">1</span><span class="o">);</span>
     <span class="n">Object</span> <span class="n">enumerable</span> <span 
class="o">=</span> <span class="n">prepared</span><span class="o">.</span><span 
class="na">getExecutable</span><span class="o">();</span>
-    <span class="c1">// etc.</span>
+    <span class="c1">// etc.
+</span>
   <span class="o">}</span>
 <span class="o">}</span></code></pre></figure>
 
@@ -613,45 +594,34 @@ file by following instructions in the <code 
class="highlighter-rouge">KEYS</code
 ball because that would be
 <a 
href="https://issues.apache.org/jira/browse/CALCITE-1746";>redundant</a>.)</p>
 
-<h2 id="set-up-nexus-repository-credentials-for-calcite-committers">Set up 
Nexus repository credentials (for Calcite committers)</h2>
-
-<p>Gradle provides multiple ways to <a 
href="https://docs.gradle.org/current/userguide/build_environment.html#sec:gradle_configuration_properties";>configure
 project properties</a>.
-For instance, you could update <code 
class="highlighter-rouge">$HOME/.gradle/gradle.properties</code>.</p>
-
-<p>Note: the build script would print the missing properties, so you can try 
running it and let it complain on the missing ones.</p>
-
-<p>The following options are used:</p>
-
-<figure class="highlight"><pre><code class="language-properties" 
data-lang="properties"><span class="py">asfCommitterId</span><span 
class="p">=</span>
-<span class="py">asfNexusUsername</span><span class="p">=</span>
-<span class="py">asfNexusPassword</span><span class="p">=</span>
-<span class="py">asfSvnUsername</span><span class="p">=</span>
-<span class="py">asfSvnPassword</span><span 
class="p">=</span></code></pre></figure>
+<h2 id="set-up-maven-repository-credentials-for-calcite-committers">Set up 
Maven repository credentials (for Calcite committers)</h2>
 
-<p>Note: when https://github.com/vlsi/asflike-release-environment is used, the 
credentials are takend from
-<code class="highlighter-rouge">asfTest...</code> (e.g. <code 
class="highlighter-rouge">asfTestNexusUsername=test</code>)</p>
-
-<p>Note: if you want to uses <code class="highlighter-rouge">gpg-agent</code>, 
you need to pass <code class="highlighter-rouge">useGpgCmd</code> property, and 
specify the key id
-via <code class="highlighter-rouge">signing.gnupg.keyName</code>.</p>
+<p>Follow the instructions <a 
href="https://www.apache.org/dev/publishing-maven-artifacts.html#dev-env";>here</a>
 to add your credentials to your maven configuration.</p>
 
 <h2 id="making-a-snapshot-for-calcite-committers">Making a snapshot (for 
Calcite committers)</h2>
 
 <p>Before you start:</p>
 
 <ul>
+  <li>Set up signing keys as described above.</li>
   <li>Make sure you are using JDK 8.</li>
   <li>Make sure build and tests succeed with <code 
class="highlighter-rouge">-Dcalcite.test.db=hsqldb</code> (the default)</li>
 </ul>
 
-<figure class="highlight"><pre><code class="language-bash" 
data-lang="bash"><span class="c"># Make sure that there are no junk files in 
the sandbox</span>
+<figure class="highlight"><pre><code class="language-bash" 
data-lang="bash"><span class="c"># Tell GPG how to read a password from your 
terminal
+</span>
+<span class="nb">export </span><span class="nv">GPG_TTY</span><span 
class="o">=</span><span class="k">$(</span>tty<span class="k">)</span>
+
+<span class="c"># Make sure that there are no junk files in the sandbox
+</span>
 git clean <span class="nt">-xn</span>
-<span class="c"># Publish snapshot artifacts</span>
-./gradlew clean publish <span class="nt">-Pasf</span></code></pre></figure>
+./mvnw clean
+
+./mvnw <span class="nt">-Papache-release</span> install</code></pre></figure>
 
-<h2 id="making-a-release-candidate-for-calcite-committers">Making a release 
candidate (for Calcite committers)</h2>
+<p>When the dry-run has succeeded, change <code 
class="highlighter-rouge">install</code> to <code 
class="highlighter-rouge">deploy</code>.</p>
 
-<p>Note: release artifacts (dist.apache.org and repository.apache.org) are 
managed with
-<a 
href="https://github.com/vlsi/vlsi-release-plugins/tree/master/plugins/stage-vote-release-plugin";>stage-vote-release-plugin</a></p>
+<h2 id="making-a-release-for-calcite-committers">Making a release (for Calcite 
committers)</h2>
 
 <p>Before you start:</p>
 
@@ -660,18 +630,20 @@ git clean <span class="nt">-xn</span>
   <li>Make sure you are using JDK 8 (not 9 or 10).</li>
   <li>Check that <code class="highlighter-rouge">README</code> and <code 
class="highlighter-rouge">site/_docs/howto.md</code> have the correct version 
number.</li>
   <li>Check that <code class="highlighter-rouge">NOTICE</code> has the current 
copyright year.</li>
-  <li>Check that <code class="highlighter-rouge">calcite.version</code> has 
the proper value in <code 
class="highlighter-rouge">/gradle.properties</code>.</li>
-  <li>Make sure build and tests succeed</li>
-  <li>Make sure that <code class="highlighter-rouge">./gradlew javadoc</code> 
succeeds
+  <li>Set <code class="highlighter-rouge">version.major</code> and <code 
class="highlighter-rouge">version.minor</code> in <code 
class="highlighter-rouge">pom.xml</code>.</li>
+  <li>Make sure build and tests succeed, including with <code 
class="highlighter-rouge">-P it,it-oracle</code>.</li>
+  <li>Make sure that <code class="highlighter-rouge">./mvnw javadoc:javadoc 
javadoc:test-javadoc</code> succeeds
 (i.e. gives no errors; warnings are OK)</li>
   <li>Generate a report of vulnerabilities that occur among dependencies,
-using <code class="highlighter-rouge">./gradlew dependencyCheckUpdate 
dependencyCheckAggregate</code>.
-Report to <a 
href="mailto:[email protected]";>[email protected]</a>
+using <code class="highlighter-rouge">-Ppedantic</code>; if you like, run 
again with <code class="highlighter-rouge">-DfailBuildOnCVSS=8</code> to see
+whether serious vulnerabilities exist. Report to <a 
href="mailto:[email protected]";>[email protected]</a>
 if new critical vulnerabilities are found among dependencies.</li>
+  <li>Make sure that <code class="highlighter-rouge">./mvnw 
apache-rat:check</code> succeeds. (It will be run as part of
+the release, but it’s better to trouble-shoot early.)</li>
   <li>Decide the supported configurations of JDK, operating system and
 Guava.  These will probably be the same as those described in the
 release notes of the previous release.  Document them in the release
-notes.  To test Guava version <em>x.y</em>, specify <code 
class="highlighter-rouge">-Pguava.version=x.y</code></li>
+notes.  To test Guava version <em>x.y</em>, specify <code 
class="highlighter-rouge">-Dguava.version=x.y</code></li>
   <li>Optional extra tests:
     <ul>
       <li><code class="highlighter-rouge">-Dcalcite.test.db=mysql</code></li>
@@ -700,44 +672,66 @@ just about to release)</li>
 <figure class="highlight"><pre><code class="language-sql" 
data-lang="sql"><span class="err">$</span> <span class="p">.</span><span 
class="o">/</span><span class="n">sqlline</span>
 <span class="o">&gt;</span> <span class="o">!</span><span 
class="k">connect</span> <span class="n">jdbc</span><span 
class="p">:</span><span class="n">calcite</span><span class="p">:</span><span 
class="n">fun</span><span class="o">=</span><span class="n">spatial</span><span 
class="p">,</span><span class="n">oracle</span> <span class="nv">"sa"</span> 
<span class="nv">""</span>
 <span class="k">SELECT</span> <span class="n">NVL</span><span 
class="p">(</span><span class="n">ST_Is3D</span><span class="p">(</span><span 
class="n">ST_PointFromText</span><span class="p">(</span><span 
class="s1">'POINT(-71.064544 42.28787)'</span><span class="p">)),</span> <span 
class="k">TRUE</span><span class="p">);</span>
-<span class="o">+</span><span class="c1">--------+</span>
+<span class="o">+</span><span class="c1">--------+
+</span>
 <span class="o">|</span> <span class="n">EXPR</span><span 
class="err">$</span><span class="mi">0</span> <span class="o">|</span>
-<span class="o">+</span><span class="c1">--------+</span>
+<span class="o">+</span><span class="c1">--------+
+</span>
 <span class="o">|</span> <span class="k">false</span>  <span class="o">|</span>
-<span class="o">+</span><span class="c1">--------+</span>
+<span class="o">+</span><span class="c1">--------+
+</span>
 <span class="mi">1</span> <span class="k">row</span> <span 
class="n">selected</span> <span class="p">(</span><span 
class="mi">0</span><span class="p">.</span><span class="mi">039</span> <span 
class="n">seconds</span><span class="p">)</span>
 <span class="o">&gt;</span> <span class="o">!</span><span 
class="n">quit</span></code></pre></figure>
 
-<p>The release candidate process does not add commits,
-so there’s no harm if it fails. It might leave <code 
class="highlighter-rouge">-rc</code> tag behind
-which can be removed if required.</p>
+<p>Create a release branch named after the release, e.g. <code 
class="highlighter-rouge">branch-1.1</code>, and push it to Apache.</p>
 
-<p>You can perform a dry-run release with a help of 
https://github.com/vlsi/asflike-release-environment
-That would perform the same steps, however it would push changes to the mock 
Nexus, Git, and SVN servers.</p>
+<figure class="highlight"><pre><code class="language-bash" 
data-lang="bash"><span class="nv">$ </span>git checkout <span 
class="nt">-b</span> branch-X.Y
+<span class="nv">$ </span>git push <span class="nt">-u</span> origin 
branch-X.Y</code></pre></figure>
 
-<p>If any of the steps fail, fix the problem, and
-start again from the top.</p>
+<p>We will use the branch for the entire the release process. Meanwhile,
+we do not allow commits to the master branch. After the release is
+final, we can use <code class="highlighter-rouge">git merge --ff-only</code> 
to append the changes on the
+release branch onto the master branch. (Apache does not allow reverts
+to the master branch, which makes it difficult to clean up the kind of
+messy commits that inevitably happen while you are trying to finalize
+a release.)</p>
 
-<h3 id="to-prepare-a-release-candidate-directly-in-your-environment">To 
prepare a release candidate directly in your environment:</h3>
+<p>Now, set up your environment and do a dry run. The dry run will not
+commit any changes back to git and gives you the opportunity to verify
+that the release process will complete as expected.</p>
 
-<p>Pick a release candidate index and ensure it does not interfere with 
previous candidates for the version.</p>
+<p>If any of the steps fail, clean up (see below), fix the problem, and
+start again from the top.</p>
 
-<figure class="highlight"><pre><code class="language-bash" 
data-lang="bash"><span class="c"># Tell GPG how to read a password from your 
terminal</span>
+<figure class="highlight"><pre><code class="language-bash" 
data-lang="bash"><span class="c"># Tell GPG how to read a password from your 
terminal
+</span>
 <span class="nb">export </span><span class="nv">GPG_TTY</span><span 
class="o">=</span><span class="k">$(</span>tty<span class="k">)</span>
 
-<span class="c"># Make sure that there are no junk files in the sandbox</span>
+<span class="c"># Make sure that there are no junk files in the sandbox
+</span>
 git clean <span class="nt">-xn</span>
-
-<span class="c"># Dry run the release candidate (push to 
asf-like-environment)</span>
-./gradlew prepareVote <span class="nt">-Prc</span><span class="o">=</span>1
-
-<span class="c"># Push release candidate to ASF servers</span>
-./gradlew prepareVote <span class="nt">-Prc</span><span class="o">=</span>1 
<span class="nt">-Pasf</span></code></pre></figure>
-
-<h4 id="checking-the-artifacts">Checking the artifacts</h4>
+./mvnw clean
+
+<span class="c"># Do a dry run of the release:prepare step, which sets version 
numbers
+</span>
+<span class="c"># (accept the default tag name of calcite-X.Y.Z).
+</span>
+<span class="c"># Note X.Y.Z is the current version we're trying to release 
(e.g. 1.8.0),
+</span>
+<span class="c"># and X.(Y+1).Z is the next development version (e.g. 1.9.0).
+</span>
+./mvnw <span class="nt">-DdryRun</span><span class="o">=</span><span 
class="nb">true</span> <span class="nt">-DskipTests</span> <span 
class="nt">-DreleaseVersion</span><span class="o">=</span>X.Y.Z <span 
class="nt">-DdevelopmentVersion</span><span class="o">=</span>X.<span 
class="o">(</span>Y+1<span class="o">)</span>.Z-SNAPSHOT <span 
class="nt">-Papache-release</span> <span class="nt">-Darguments</span><span 
class="o">=</span><span class="nt">-DskipTests</span> release:prepare 2&gt;&amp 
[...]
+
+<span class="c"># If you have multiple GPG keys, you can select the key used 
to sign the release by adding `-Dgpg.keyname=${GPG_KEY_ID}` to `-Darguments`:
+</span>
+./mvnw <span class="nt">-DdryRun</span><span class="o">=</span><span 
class="nb">true</span> <span class="nt">-DskipTests</span> <span 
class="nt">-DreleaseVersion</span><span class="o">=</span>X.Y.Z <span 
class="nt">-DdevelopmentVersion</span><span class="o">=</span>X.<span 
class="o">(</span>Y+1<span class="o">)</span>.Z-SNAPSHOT <span 
class="nt">-Papache-release</span> <span class="nt">-Darguments</span><span 
class="o">=</span><span class="s2">"-DskipTests -Dgpg.keyname=</span><span clas 
[...]
+
+<p>Check the artifacts.
+Note that when performing the dry run <code 
class="highlighter-rouge">SNAPSHOT</code> will appear in any file or directory 
names given below.
+The version will be automatically changed when performing the release for 
real.</p>
 
 <ul>
-  <li>In the <code 
class="highlighter-rouge">release/build/distributions</code> directory should 
be these 3 files, among others:
+  <li>In the <code class="highlighter-rouge">target</code> directory should be 
these 3 files, among others:
     <ul>
       <li><code 
class="highlighter-rouge">apache-calcite-X.Y.Z-src.tar.gz</code></li>
       <li><code 
class="highlighter-rouge">apache-calcite-X.Y.Z-src.tar.gz.asc</code></li>
@@ -757,13 +751,42 @@ no binary distro), check that all files belong to a 
directory called
   </li>
   <li>Make sure that there is no <code class="highlighter-rouge">KEYS</code> 
file in the source distros</li>
   <li>In each .jar (for example
-<code class="highlighter-rouge">core/build/libs/calcite-core-X.Y.Z.jar</code> 
and
-<code 
class="highlighter-rouge">mongodb/build/libs/calcite-mongodb-X.Y.Z-sources.jar</code>),
 check
-that the <code class="highlighter-rouge">META-INF</code> directory contains 
<code class="highlighter-rouge">LICENSE</code>,
-<code class="highlighter-rouge">NOTICE</code></li>
+<code class="highlighter-rouge">core/target/calcite-core-X.Y.Z.jar</code> and
+<code 
class="highlighter-rouge">mongodb/target/calcite-mongodb-X.Y.Z-sources.jar</code>),
 check
+that the <code class="highlighter-rouge">META-INF</code> directory contains 
<code class="highlighter-rouge">DEPENDENCIES</code>, <code 
class="highlighter-rouge">LICENSE</code>,
+<code class="highlighter-rouge">NOTICE</code> and <code 
class="highlighter-rouge">git.properties</code></li>
+  <li>In <code 
class="highlighter-rouge">core/target/calcite-core-X.Y.Z.jar</code>,
+check that <code 
class="highlighter-rouge">org-apache-calcite-jdbc.properties</code> is
+present and does not contain un-substituted <code 
class="highlighter-rouge">${...}</code> variables</li>
   <li>Check PGP, per <a 
href="https://httpd.apache.org/dev/verification.html";>this</a></li>
 </ul>
 
+<p>Now, remove the <code class="highlighter-rouge">-DdryRun</code> flag and 
run the release for real.
+For this step you’ll have to add the <a 
href="https://maven.apache.org/developers/committer-settings.html";>Apache 
servers</a> to <code class="highlighter-rouge">~/.m2/settings.xml</code>.</p>
+
+<figure class="highlight"><pre><code class="language-bash" 
data-lang="bash"><span class="c"># Make sure that there are no junk files in 
the sandbox; performing a dry run may have generated
+</span>
+<span class="c"># redundant files that do not need to be present in the 
release artifacts.
+</span>
+git clean <span class="nt">-xn</span>
+./mvnw clean
+
+<span class="c"># Prepare sets the version numbers, creates a tag, and pushes 
it to git
+</span>
+<span class="c"># Note X.Y.Z is the current version we're trying to release, 
and X.Y+1.Z is the next development version.
+</span>
+<span class="c"># For example, if I am currently building a release for 
1.16.0, X.Y.Z would be 1.16.0 and X.Y+1.Z would be 1.17.0.
+</span>
+./mvnw <span class="nt">-DdryRun</span><span class="o">=</span><span 
class="nb">false</span> <span class="nt">-DskipTests</span> <span 
class="nt">-DreleaseVersion</span><span class="o">=</span>X.Y.Z <span 
class="nt">-DdevelopmentVersion</span><span class="o">=</span>X.Y+1.Z-SNAPSHOT 
<span class="nt">-Papache-release</span> <span 
class="nt">-Darguments</span><span class="o">=</span><span 
class="nt">-DskipTests</span> release:prepare 2&gt;&amp;1 | tee /tmp/prepare.log
+
+<span class="c"># If you have multiple GPG keys, you can select the key used 
to sign the release by adding `-Dgpg.keyname=${GPG_KEY_ID}` to `-Darguments`:
+</span>
+./mvnw <span class="nt">-DdryRun</span><span class="o">=</span><span 
class="nb">false</span> <span class="nt">-DskipTests</span> <span 
class="nt">-DreleaseVersion</span><span class="o">=</span>X.Y.Z <span 
class="nt">-DdevelopmentVersion</span><span class="o">=</span>X.Y+1.Z-SNAPSHOT 
<span class="nt">-Papache-release</span> <span 
class="nt">-Darguments</span><span class="o">=</span><span 
class="s2">"-DskipTests -Dgpg.keyname=</span><span class="k">${</span><span 
class="nv">GPG_KEY_ID</spa [...]
+
+<span class="c"># Perform checks out the tagged version, builds, and deploys 
to the staging repository
+</span>
+./mvnw <span class="nt">-DskipTests</span> <span 
class="nt">-Papache-release</span> release:perform 2&gt;&amp;1 | tee 
/tmp/perform.log</code></pre></figure>
+
 <p>Verify the staged artifacts in the Nexus repository:</p>
 
 <ul>
@@ -777,21 +800,65 @@ 
https://repository.apache.org/content/repositories/orgapachecalcite-1000
 (or a similar URL)</li>
 </ul>
 
+<p>Upload the artifacts via subversion to a staging area,
+https://dist.apache.org/repos/dist/dev/calcite/apache-calcite-X.Y.Z-rcN:</p>
+
+<figure class="highlight"><pre><code class="language-bash" 
data-lang="bash"><span class="c"># Create a subversion workspace, if you 
haven't already
+</span>
+mkdir <span class="nt">-p</span> ~/dist/dev
+<span class="nb">pushd</span> ~/dist/dev
+svn co https://dist.apache.org/repos/dist/dev/calcite
+<span class="nb">popd</span>
+
+<span class="c"># Move the files into a directory
+</span>
+mkdir ~/dist/dev/calcite/apache-calcite-X.Y.Z-rcN
+mv apache-calcite-<span class="k">*</span> 
~/dist/dev/calcite/apache-calcite-X.Y.Z-rcN
+
+<span class="c"># Check in
+</span>
+<span class="nb">cd</span> ~/dist/dev/calcite
+svn add apache-calcite-X.Y.Z-rcN
+svn ci</code></pre></figure>
+
 <h2 
id="cleaning-up-after-a-failed-release-attempt-for-calcite-committers">Cleaning 
up after a failed release attempt (for Calcite committers)</h2>
 
-<p>If something is not correct, you can fix it, commit it, and prepare the 
next candidate.
-The release candidate tags might be kept for a while.</p>
+<figure class="highlight"><pre><code class="language-bash" 
data-lang="bash"><span class="c"># Make sure that the tag you are about to 
generate does not already
+</span>
+<span class="c"># exist (due to a failed release attempt)
+</span>
+git tag
+
+<span class="c"># If the tag exists, delete it locally and remotely
+</span>
+git tag <span class="nt">-d</span> calcite-X.Y.Z
+git push origin :refs/tags/calcite-X.Y.Z
+
+<span class="c"># Remove modified files
+</span>
+./mvnw release:clean
+
+<span class="c"># Check whether there are modified files and if so, go back to 
the
+</span>
+<span class="c"># original git commit
+</span>
+git status
+git reset <span class="nt">--hard</span> HEAD</code></pre></figure>
 
 <h2 id="validate-a-release">Validate a release</h2>
 
-<figure class="highlight"><pre><code class="language-bash" 
data-lang="bash"><span class="c"># Check that the signing key (e.g. 
DDB6E9812AD3FAE3) is pushed</span>
+<figure class="highlight"><pre><code class="language-bash" 
data-lang="bash"><span class="c"># Check that the signing key (e.g. 
DDB6E9812AD3FAE3) is pushed
+</span>
 gpg <span class="nt">--recv-keys</span> key
 
-<span class="c"># Check keys</span>
+<span class="c"># Check keys
+</span>
 curl <span class="nt">-O</span> 
https://dist.apache.org/repos/dist/release/calcite/KEYS
 
-<span class="c"># Sign/check sha256 hashes</span>
-<span class="c"># (Assumes your O/S has a 'shasum' command.)</span>
+<span class="c"># Sign/check sha256 hashes
+</span>
+<span class="c"># (Assumes your O/S has a 'shasum' command.)
+</span>
 <span class="k">function </span>checkHash<span class="o">()</span> <span 
class="o">{</span>
   <span class="nb">cd</span> <span class="s2">"</span><span 
class="nv">$1</span><span class="s2">"</span>
   <span class="k">for </span>i <span class="k">in</span> <span 
class="k">*</span>.<span class="o">{</span>pom,gz<span class="o">}</span><span 
class="p">;</span> <span class="k">do
@@ -814,9 +881,7 @@ checkHash apache-calcite-X.Y.Z-rcN</code></pre></figure>
 
 <h2 
id="get-approval-for-a-release-via-apache-voting-process-for-calcite-committers">Get
 approval for a release via Apache voting process (for Calcite committers)</h2>
 
-<p>Release vote on dev list
-Note: the draft mail is printed as the final step of <code 
class="highlighter-rouge">prepareVote</code> task,
-and you can find the draft in <code 
class="highlighter-rouge">/build/prepareVote/mail.txt</code></p>
+<p>Release vote on dev list</p>
 
 <figure class="highlight"><pre><code class="language-text" 
data-lang="text">To: [email protected]
 Subject: [VOTE] Release apache-calcite-X.Y.Z (release candidate N)
@@ -906,13 +971,35 @@ This is based on the time when you expect to announce the 
release.
 This is usually a day after the vote closes.
 Remember that UTC date changes at 4pm Pacific time.</p>
 
-<h3 id="publishing-directly-in-your-environment">Publishing directly in your 
environment:</h3>
+<p>Promote the staged nexus artifacts.</p>
 
-<figure class="highlight"><pre><code class="language-bash" 
data-lang="bash"><span class="c"># Dry run publishing the release (push to 
asf-like-environment)</span>
-./gradlew publishDist <span class="nt">-Prc</span><span class="o">=</span>1
+<ul>
+  <li>Go to <a 
href="https://repository.apache.org/";>https://repository.apache.org/</a> and 
login</li>
+  <li>Under “Build Promotion” click “Staging Repositories”</li>
+  <li>In the line with “orgapachecalcite-xxxx”, check the box</li>
+  <li>Press “Release” button</li>
+</ul>
 
-<span class="c"># Publish the release to ASF servers</span>
-./gradlew publishDist <span class="nt">-Prc</span><span class="o">=</span>1 
<span class="nt">-Pasf</span></code></pre></figure>
+<p>Check the artifacts into svn.</p>
+
+<figure class="highlight"><pre><code class="language-bash" 
data-lang="bash"><span class="c"># Get the release candidate.
+</span>
+mkdir <span class="nt">-p</span> ~/dist/dev
+<span class="nb">cd</span> ~/dist/dev
+svn co https://dist.apache.org/repos/dist/dev/calcite
+
+<span class="c"># Copy the artifacts. Note that the copy does not have '-rcN' 
suffix.
+</span>
+mkdir <span class="nt">-p</span> ~/dist/release
+<span class="nb">cd</span> ~/dist/release
+svn co https://dist.apache.org/repos/dist/release/calcite
+<span class="nb">cd </span>calcite
+cp <span class="nt">-rp</span> ../../dev/calcite/apache-calcite-X.Y.Z-rcN 
apache-calcite-X.Y.Z
+svn add apache-calcite-X.Y.Z
+
+<span class="c"># Check in.
+</span>
+svn ci</code></pre></figure>
 
 <p>Svnpubsub will publish to the
 <a href="https://dist.apache.org/repos/dist/release/calcite";>release repo</a> 
and propagate to the
diff --git a/docs/index.html b/docs/index.html
index 27db109..ef780a6 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -197,6 +197,7 @@ more details in the <a href="reference.html">SQL 
reference</a></li>
   <li>Several <a href="adapter.html">adapters</a></li>
 </ul>
 
+
           
 
 
diff --git a/docs/lattice.html b/docs/lattice.html
index 22df82e..a1479eb 100644
--- a/docs/lattice.html
+++ b/docs/lattice.html
@@ -242,9 +242,11 @@ populating materialized views. Let’s run a query and check 
out its plan:</p>
 <span class="p">.</span> <span class="p">.</span> <span class="p">.</span> 
<span class="p">.</span><span class="o">&gt;</span> <span class="k">from</span> 
<span class="nv">"sales_fact_1997"</span>
 <span class="p">.</span> <span class="p">.</span> <span class="p">.</span> 
<span class="p">.</span><span class="o">&gt;</span> <span class="k">join</span> 
<span class="nv">"time_by_day"</span> <span class="k">using</span> <span 
class="p">(</span><span class="nv">"time_id"</span><span class="p">)</span>
 <span class="p">.</span> <span class="p">.</span> <span class="p">.</span> 
<span class="p">.</span><span class="o">&gt;</span> <span 
class="k">group</span> <span class="k">by</span> <span 
class="nv">"the_year"</span><span class="p">,</span><span 
class="nv">"the_month"</span><span class="p">;</span>
-<span class="o">+</span><span class="c1">----------+-----------+------+</span>
+<span class="o">+</span><span class="c1">----------+-----------+------+
+</span>
 <span class="o">|</span> <span class="n">the_year</span> <span 
class="o">|</span> <span class="n">the_month</span> <span class="o">|</span>    
<span class="k">C</span> <span class="o">|</span>
-<span class="o">+</span><span class="c1">----------+-----------+------+</span>
+<span class="o">+</span><span class="c1">----------+-----------+------+
+</span>
 <span class="o">|</span> <span class="mi">1997</span>     <span 
class="o">|</span> <span class="n">September</span> <span class="o">|</span> 
<span class="mi">6663</span> <span class="o">|</span>
 <span class="o">|</span> <span class="mi">1997</span>     <span 
class="o">|</span> <span class="n">April</span>     <span class="o">|</span> 
<span class="mi">6590</span> <span class="o">|</span>
 <span class="o">|</span> <span class="mi">1997</span>     <span 
class="o">|</span> <span class="n">January</span>   <span class="o">|</span> 
<span class="mi">7034</span> <span class="o">|</span>
@@ -257,7 +259,8 @@ populating materialized views. Let’s run a query and check 
out its plan:</p>
 <span class="o">|</span> <span class="mi">1997</span>     <span 
class="o">|</span> <span class="n">December</span>  <span class="o">|</span> 
<span class="mi">8717</span> <span class="o">|</span>
 <span class="o">|</span> <span class="mi">1997</span>     <span 
class="o">|</span> <span class="n">July</span>      <span class="o">|</span> 
<span class="mi">7752</span> <span class="o">|</span>
 <span class="o">|</span> <span class="mi">1997</span>     <span 
class="o">|</span> <span class="n">November</span>  <span class="o">|</span> 
<span class="mi">8232</span> <span class="o">|</span>
-<span class="o">+</span><span class="c1">----------+-----------+------+</span>
+<span class="o">+</span><span class="c1">----------+-----------+------+
+</span>
 <span class="mi">12</span> <span class="k">rows</span> <span 
class="n">selected</span> <span class="p">(</span><span 
class="mi">0</span><span class="p">.</span><span class="mi">147</span> <span 
class="n">seconds</span><span class="p">)</span>
 
 <span class="n">sqlline</span><span class="o">&gt;</span> <span 
class="k">explain</span> <span class="n">plan</span> <span class="k">for</span>
@@ -265,9 +268,11 @@ populating materialized views. Let’s run a query and check 
out its plan:</p>
 <span class="p">.</span> <span class="p">.</span> <span class="p">.</span> 
<span class="p">.</span><span class="o">&gt;</span> <span class="k">from</span> 
<span class="nv">"sales_fact_1997"</span>
 <span class="p">.</span> <span class="p">.</span> <span class="p">.</span> 
<span class="p">.</span><span class="o">&gt;</span> <span class="k">join</span> 
<span class="nv">"time_by_day"</span> <span class="k">using</span> <span 
class="p">(</span><span class="nv">"time_id"</span><span class="p">)</span>
 <span class="p">.</span> <span class="p">.</span> <span class="p">.</span> 
<span class="p">.</span><span class="o">&gt;</span> <span 
class="k">group</span> <span class="k">by</span> <span 
class="nv">"the_year"</span><span class="p">,</span><span 
class="nv">"the_month"</span><span class="p">;</span>
-<span class="o">+</span><span 
class="c1">--------------------------------------------------------------------------------+</span>
+<span class="o">+</span><span 
class="c1">--------------------------------------------------------------------------------+
+</span>
 <span class="o">|</span> <span class="n">PLAN</span>                           
                                                <span class="o">|</span>
-<span class="o">+</span><span 
class="c1">--------------------------------------------------------------------------------+</span>
+<span class="o">+</span><span 
class="c1">--------------------------------------------------------------------------------+
+</span>
 <span class="o">|</span> <span class="n">EnumerableCalc</span><span 
class="p">(</span><span class="n">expr</span><span class="o">#</span><span 
class="mi">0</span><span class="p">..</span><span class="mi">2</span><span 
class="o">=</span><span class="p">[</span><span class="err">{</span><span 
class="n">inputs</span><span class="err">}</span><span class="p">],</span> 
<span class="n">the_year</span><span class="o">=</span><span 
class="p">[</span><span class="err">$</span><span class="n">t1</ [...]
 <span class="o">|</span>   <span class="n">EnumerableAggregate</span><span 
class="p">(</span><span class="k">group</span><span class="o">=</span><span 
class="p">[</span><span class="err">{</span><span class="mi">3</span><span 
class="p">,</span> <span class="mi">4</span><span class="err">}</span><span 
class="p">],</span> <span class="k">C</span><span class="o">=</span><span 
class="p">[</span><span class="err">$</span><span class="n">SUM0</span><span 
class="p">(</span><span class="err">$</ [...]
 <span class="o">|</span>     <span class="n">EnumerableTableScan</span><span 
class="p">(</span><span class="k">table</span><span class="o">=</span><span 
class="p">[[</span><span class="n">adhoc</span><span class="p">,</span> <span 
class="n">m</span><span class="err">{</span><span class="mi">16</span><span 
class="p">,</span> <span class="mi">17</span><span class="p">,</span> <span 
class="mi">27</span><span class="p">,</span> <span class="mi">31</span><span 
class="p">,</span> <span class=" [...]
@@ -282,9 +287,11 @@ tiles created at the start of the connection.</p>
 so is a more efficient way to answer the query:</p>
 
 <figure class="highlight"><pre><code class="language-sql" 
data-lang="sql"><span class="n">sqlline</span><span class="o">&gt;</span> <span 
class="o">!</span><span class="k">describe</span> <span 
class="nv">"adhoc"</span><span class="p">.</span><span class="nv">"m{16, 17, 
27, 31, 32, 36, 37}"</span>
-<span class="o">+</span><span 
class="c1">-------------+-------------------------------+--------------------+-----------+-----------------+</span>
+<span class="o">+</span><span 
class="c1">-------------+-------------------------------+--------------------+-----------+-----------------+
+</span>
 <span class="o">|</span> <span class="n">TABLE_SCHEM</span> <span 
class="o">|</span> <span class="k">TABLE_NAME</span>                    <span 
class="o">|</span> <span class="k">COLUMN_NAME</span>        <span 
class="o">|</span> <span class="n">DATA_TYPE</span> <span class="o">|</span> 
<span class="n">TYPE_NAME</span>       <span class="o">|</span>
-<span class="o">+</span><span 
class="c1">-------------+-------------------------------+--------------------+-----------+-----------------+</span>
+<span class="o">+</span><span 
class="c1">-------------+-------------------------------+--------------------+-----------+-----------------+
+</span>
 <span class="o">|</span> <span class="n">adhoc</span>       <span 
class="o">|</span> <span class="n">m</span><span class="err">{</span><span 
class="mi">16</span><span class="p">,</span> <span class="mi">17</span><span 
class="p">,</span> <span class="mi">27</span><span class="p">,</span> <span 
class="mi">31</span><span class="p">,</span> <span class="mi">32</span><span 
class="p">,</span> <span class="mi">36</span><span class="p">,</span> <span 
class="mi">37</span><span class="err">}</span [...]
 <span class="o">|</span> <span class="n">adhoc</span>       <span 
class="o">|</span> <span class="n">m</span><span class="err">{</span><span 
class="mi">16</span><span class="p">,</span> <span class="mi">17</span><span 
class="p">,</span> <span class="mi">27</span><span class="p">,</span> <span 
class="mi">31</span><span class="p">,</span> <span class="mi">32</span><span 
class="p">,</span> <span class="mi">36</span><span class="p">,</span> <span 
class="mi">37</span><span class="err">}</span [...]
 <span class="o">|</span> <span class="n">adhoc</span>       <span 
class="o">|</span> <span class="n">m</span><span class="err">{</span><span 
class="mi">16</span><span class="p">,</span> <span class="mi">17</span><span 
class="p">,</span> <span class="mi">27</span><span class="p">,</span> <span 
class="mi">31</span><span class="p">,</span> <span class="mi">32</span><span 
class="p">,</span> <span class="mi">36</span><span class="p">,</span> <span 
class="mi">37</span><span class="err">}</span [...]
@@ -293,15 +300,19 @@ so is a more efficient way to answer the query:</p>
 <span class="o">|</span> <span class="n">adhoc</span>       <span 
class="o">|</span> <span class="n">m</span><span class="err">{</span><span 
class="mi">16</span><span class="p">,</span> <span class="mi">17</span><span 
class="p">,</span> <span class="mi">27</span><span class="p">,</span> <span 
class="mi">31</span><span class="p">,</span> <span class="mi">32</span><span 
class="p">,</span> <span class="mi">36</span><span class="p">,</span> <span 
class="mi">37</span><span class="err">}</span [...]
 <span class="o">|</span> <span class="n">adhoc</span>       <span 
class="o">|</span> <span class="n">m</span><span class="err">{</span><span 
class="mi">16</span><span class="p">,</span> <span class="mi">17</span><span 
class="p">,</span> <span class="mi">27</span><span class="p">,</span> <span 
class="mi">31</span><span class="p">,</span> <span class="mi">32</span><span 
class="p">,</span> <span class="mi">36</span><span class="p">,</span> <span 
class="mi">37</span><span class="err">}</span [...]
 <span class="o">|</span> <span class="n">adhoc</span>       <span 
class="o">|</span> <span class="n">m</span><span class="err">{</span><span 
class="mi">16</span><span class="p">,</span> <span class="mi">17</span><span 
class="p">,</span> <span class="mi">27</span><span class="p">,</span> <span 
class="mi">31</span><span class="p">,</span> <span class="mi">32</span><span 
class="p">,</span> <span class="mi">36</span><span class="p">,</span> <span 
class="mi">37</span><span class="err">}</span [...]
-<span class="o">+</span><span 
class="c1">-------------+-------------------------------+--------------------+-----------+-----------------+</span>
+<span class="o">+</span><span 
class="c1">-------------+-------------------------------+--------------------+-----------+-----------------+
+</span>
 
 <span class="n">sqlline</span><span class="o">&gt;</span> <span 
class="k">select</span> <span class="k">count</span><span 
class="p">(</span><span class="o">*</span><span class="p">)</span> <span 
class="k">as</span> <span class="k">c</span>
 <span class="p">.</span> <span class="p">.</span> <span class="p">.</span> 
<span class="p">.</span><span class="o">&gt;</span> <span class="k">from</span> 
<span class="nv">"adhoc"</span><span class="p">.</span><span class="nv">"m{16, 
17, 27, 31, 32, 36, 37}"</span><span class="p">;</span>
-<span class="o">+</span><span class="c1">-----+</span>
+<span class="o">+</span><span class="c1">-----+
+</span>
 <span class="o">|</span>   <span class="k">C</span> <span class="o">|</span>
-<span class="o">+</span><span class="c1">-----+</span>
+<span class="o">+</span><span class="c1">-----+
+</span>
 <span class="o">|</span> <span class="mi">120</span> <span class="o">|</span>
-<span class="o">+</span><span class="c1">-----+</span>
+<span class="o">+</span><span class="c1">-----+
+</span>
 <span class="mi">1</span> <span class="k">row</span> <span 
class="n">selected</span> <span class="p">(</span><span 
class="mi">0</span><span class="p">.</span><span class="mi">12</span> <span 
class="n">seconds</span><span class="p">)</span></code></pre></figure>
 
 <p>Let’s list the tables, and you will see several more tiles. There are also
@@ -309,9 +320,11 @@ tables of the <code 
class="highlighter-rouge">foodmart</code> schema, and the sy
 and the lattice itself, which appears as a table called <code 
class="highlighter-rouge">star</code>.</p>
 
 <figure class="highlight"><pre><code class="language-sql" 
data-lang="sql"><span class="n">sqlline</span><span class="o">&gt;</span> <span 
class="o">!</span><span class="n">tables</span>
-<span class="o">+</span><span 
class="c1">-------------+-------------------------------+--------------+</span>
+<span class="o">+</span><span 
class="c1">-------------+-------------------------------+--------------+
+</span>
 <span class="o">|</span> <span class="n">TABLE_SCHEM</span> <span 
class="o">|</span> <span class="k">TABLE_NAME</span>                    <span 
class="o">|</span> <span class="n">TABLE_TYPE</span>   <span class="o">|</span>
-<span class="o">+</span><span 
class="c1">-------------+-------------------------------+--------------+</span>
+<span class="o">+</span><span 
class="c1">-------------+-------------------------------+--------------+
+</span>
 <span class="o">|</span> <span class="n">adhoc</span>       <span 
class="o">|</span> <span class="n">m</span><span class="err">{</span><span 
class="mi">16</span><span class="p">,</span> <span class="mi">17</span><span 
class="p">,</span> <span class="mi">18</span><span class="p">,</span> <span 
class="mi">32</span><span class="p">,</span> <span class="mi">37</span><span 
class="err">}</span>         <span class="o">|</span> <span 
class="k">TABLE</span>        <span class="o">|</span>
 <span class="o">|</span> <span class="n">adhoc</span>       <span 
class="o">|</span> <span class="n">m</span><span class="err">{</span><span 
class="mi">16</span><span class="p">,</span> <span class="mi">17</span><span 
class="p">,</span> <span class="mi">19</span><span class="p">,</span> <span 
class="mi">27</span><span class="p">,</span> <span class="mi">32</span><span 
class="p">,</span> <span class="mi">36</span><span class="p">,</span> <span 
class="mi">37</span><span class="err">}</span [...]
 <span class="o">|</span> <span class="n">adhoc</span>       <span 
class="o">|</span> <span class="n">m</span><span class="err">{</span><span 
class="mi">4</span><span class="p">,</span> <span class="mi">7</span><span 
class="p">,</span> <span class="mi">16</span><span class="p">,</span> <span 
class="mi">27</span><span class="p">,</span> <span class="mi">32</span><span 
class="p">,</span> <span class="mi">37</span><span class="err">}</span>       
<span class="o">|</span> <span class="k">TABL [...]
@@ -407,6 +420,7 @@ data is changed.</li>
     In <i>Proc. ACM SIGMOD Conf.</i>, Montreal, 1996.</li>
 </ul>
 
+
           
 
 
diff --git a/docs/reference.html b/docs/reference.html
index f01c193..22061c5 100644
--- a/docs/reference.html
+++ b/docs/reference.html
@@ -227,7 +227,7 @@ form.</p>
       <span class="n">expression</span> <span class="p">[</span> <span 
class="k">ASC</span> <span class="o">|</span> <span class="k">DESC</span> <span 
class="p">]</span> <span class="p">[</span> <span class="n">NULLS</span> <span 
class="k">FIRST</span> <span class="o">|</span> <span class="n">NULLS</span> 
<span class="k">LAST</span> <span class="p">]</span>
 
 <span class="k">select</span><span class="p">:</span>
-      <span class="k">SELECT</span> <span class="p">[</span> <span 
class="s1">'/*+'</span> <span class="n">hint</span> <span class="p">[,</span> 
<span class="n">hint</span><span class="p">]</span><span class="o">*</span> 
<span class="s1">'*/'</span> <span class="p">]</span> <span class="p">[</span> 
<span class="n">STREAM</span> <span class="p">]</span> <span class="p">[</span> 
<span class="k">ALL</span> <span class="o">|</span> <span 
class="k">DISTINCT</span> <span class="p">]</span>
+      <span class="k">SELECT</span> <span class="p">[</span> <span 
class="n">STREAM</span> <span class="p">]</span> <span class="p">[</span> <span 
class="k">ALL</span> <span class="o">|</span> <span class="k">DISTINCT</span> 
<span class="p">]</span>
           <span class="err">{</span> <span class="o">*</span> <span 
class="o">|</span> <span class="n">projectItem</span> <span class="p">[,</span> 
<span class="n">projectItem</span> <span class="p">]</span><span 
class="o">*</span> <span class="err">}</span>
       <span class="k">FROM</span> <span class="n">tableExpression</span>
       <span class="p">[</span> <span class="k">WHERE</span> <span 
class="n">booleanExpression</span> <span class="p">]</span>
@@ -262,7 +262,7 @@ form.</p>
 <span class="n">tablePrimary</span><span class="p">:</span>
       <span class="p">[</span> <span class="p">[</span> <span 
class="n">catalogName</span> <span class="p">.</span> <span class="p">]</span> 
<span class="n">schemaName</span> <span class="p">.</span> <span 
class="p">]</span> <span class="n">tableName</span>
       <span class="s1">'('</span> <span class="k">TABLE</span> <span 
class="p">[</span> <span class="p">[</span> <span class="n">catalogName</span> 
<span class="p">.</span> <span class="p">]</span> <span 
class="n">schemaName</span> <span class="p">.</span> <span class="p">]</span> 
<span class="n">tableName</span> <span class="s1">')'</span>
-  <span class="o">|</span>   <span class="n">tablePrimary</span> <span 
class="p">[</span> <span class="s1">'/*+'</span> <span class="n">hint</span> 
<span class="p">[,</span> <span class="n">hint</span><span 
class="p">]</span><span class="o">*</span> <span class="s1">'*/'</span> <span 
class="p">]</span> <span class="p">[</span> <span class="n">EXTEND</span> <span 
class="p">]</span> <span class="s1">'('</span> <span 
class="n">columnDecl</span> <span class="p">[,</span> <span class="n">colu [...]
+  <span class="o">|</span>   <span class="n">tablePrimary</span> <span 
class="p">[</span> <span class="n">EXTEND</span> <span class="p">]</span> <span 
class="s1">'('</span> <span class="n">columnDecl</span> <span 
class="p">[,</span> <span class="n">columnDecl</span> <span 
class="p">]</span><span class="o">*</span> <span class="s1">')'</span>
   <span class="o">|</span>   <span class="p">[</span> <span 
class="k">LATERAL</span> <span class="p">]</span> <span class="s1">'('</span> 
<span class="n">query</span> <span class="s1">')'</span>
   <span class="o">|</span>   <span class="k">UNNEST</span> <span 
class="s1">'('</span> <span class="n">expression</span> <span 
class="s1">')'</span> <span class="p">[</span> <span class="k">WITH</span> 
<span class="k">ORDINALITY</span> <span class="p">]</span>
   <span class="o">|</span>   <span class="p">[</span> <span 
class="k">LATERAL</span> <span class="p">]</span> <span class="k">TABLE</span> 
<span class="s1">'('</span> <span class="p">[</span> <span 
class="k">SPECIFIC</span> <span class="p">]</span> <span 
class="n">functionName</span> <span class="s1">'('</span> <span 
class="n">expression</span> <span class="p">[,</span> <span 
class="n">expression</span> <span class="p">]</span><span class="o">*</span> 
<span class="s1">')'</span> <span cl [...]
@@ -270,17 +270,6 @@ form.</p>
 <span class="n">columnDecl</span><span class="p">:</span>
       <span class="k">column</span> <span class="k">type</span> <span 
class="p">[</span> <span class="k">NOT</span> <span class="k">NULL</span> <span 
class="p">]</span>
 
-<span class="n">hint</span><span class="p">:</span>
-      <span class="n">hintName</span>
-  <span class="o">|</span>   <span class="n">hintName</span> <span 
class="s1">'('</span> <span class="n">hintOptions</span> <span 
class="s1">')'</span>
-
-<span class="n">hintOptions</span><span class="p">:</span>
-      <span class="n">hintKVOption</span> <span class="p">[,</span> <span 
class="n">hintKVOption</span><span class="p">]</span><span class="o">*</span>
-  <span class="o">|</span>   <span class="n">optionName</span><span 
class="p">,</span> <span class="p">[,</span> <span 
class="n">optionName</span><span class="p">]</span><span class="o">*</span>
-
-<span class="n">hintKVOption</span><span class="p">:</span>
-      <span class="n">optionName</span> <span class="s1">'='</span> <span 
class="n">stringLiteral</span>
-
 <span class="k">values</span><span class="p">:</span>
       <span class="k">VALUES</span> <span class="n">expression</span> <span 
class="p">[,</span> <span class="n">expression</span> <span 
class="p">]</span><span class="o">*</span>
 
@@ -500,7 +489,6 @@ DATABASE,
 DATETIME_INTERVAL_CODE,
 DATETIME_INTERVAL_PRECISION,
 <strong>DAY</strong>,
-DAYS,
 <strong>DEALLOCATE</strong>,
 <strong>DEC</strong>,
 DECADE,
@@ -601,7 +589,6 @@ GRANTED,
 HIERARCHY,
 <strong>HOLD</strong>,
 <strong>HOUR</strong>,
-HOURS,
 <strong>IDENTITY</strong>,
 IGNORE,
 IMMEDIATE,
@@ -690,13 +677,11 @@ MILLISECOND,
 <strong>MIN</strong>,
 <strong>MINUS</strong>,
 <strong>MINUTE</strong>,
-MINUTES,
 MINVALUE,
 <strong>MOD</strong>,
 <strong>MODIFIES</strong>,
 <strong>MODULE</strong>,
 <strong>MONTH</strong>,
-MONTHS,
 MORE,
 <strong>MULTISET</strong>,
 MUMPS,
@@ -851,7 +836,6 @@ SCOPE_SCHEMA,
 <strong>SCROLL</strong>,
 <strong>SEARCH</strong>,
 <strong>SECOND</strong>,
-SECONDS,
 SECTION,
 SECURITY,
 <strong>SEEK</strong>,
@@ -987,7 +971,6 @@ TRIGGER_SCHEMA,
 <strong>TRIM_ARRAY</strong>,
 <strong>TRUE</strong>,
 <strong>TRUNCATE</strong>,
-TUMBLE,
 TYPE,
 <strong>UESCAPE</strong>,
 UNBOUNDED,
@@ -1037,7 +1020,6 @@ WRAPPER,
 WRITE,
 XML,
 <strong>YEAR</strong>,
-YEARS,
 ZONE.</p>
 
 <h2 id="identifiers">Identifiers</h2>
@@ -1192,10 +1174,6 @@ TIMESTAMP WITH LOCAL TIME ZONE does not store the time 
zone internally, but
 it will rely on the supplied time zone to provide correct semantics.</li>
   <li>GEOMETRY is allowed only in certain
 <a 
href="/apidocs/org/apache/calcite/sql/validate/SqlConformance.html#allowGeometry--">conformance
 levels</a>.</li>
-  <li>Interval literals may only use time units
-YEAR, MONTH, DAY, HOUR, MINUTE and SECOND. In certain
-<a 
href="/apidocs/org/apache/calcite/sql/validate/SqlConformance.html#allowPluralTimeUnits--">conformance
 levels</a>,
-we also allow their plurals, YEARS, MONTHS, DAYS, HOURS, MINUTES and 
SECONDS.</li>
 </ul>
 
 <h3 id="non-scalar-types">Non-scalar types</h3>
diff --git a/docs/tutorial.html b/docs/tutorial.html
index dc79248..0bf2996 100644
--- a/docs/tutorial.html
+++ b/docs/tutorial.html
@@ -114,11 +114,12 @@ to relational operators using planner rules.</li>
 
 <h2 id="download-and-build">Download and build</h2>
 
-<p>You need Java (version 8, 9 or 10) and Git.</p>
+<p>You need Java (version 8, 9 or 10) and git.</p>
 
 <figure class="highlight"><pre><code class="language-bash" 
data-lang="bash"><span class="nv">$ </span>git clone 
https://github.com/apache/calcite.git
-<span class="nv">$ </span><span class="nb">cd </span>calcite/example/csv
-<span class="nv">$ </span>./sqlline</code></pre></figure>
+<span class="nv">$ </span><span class="nb">cd </span>calcite
+<span class="nv">$ </span>./mvnw install <span class="nt">-DskipTests</span> 
<span class="nt">-Dcheckstyle</span>.skip<span class="o">=</span><span 
class="nb">true</span>
+<span class="nv">$ </span><span class="nb">cd 
</span>example/csv</code></pre></figure>
 
 <h2 id="first-queries">First queries</h2>
 
@@ -127,7 +128,7 @@ to relational operators using planner rules.</li>
 that is included in this project.</p>
 
 <figure class="highlight"><pre><code class="language-bash" 
data-lang="bash"><span class="nv">$ </span>./sqlline
-sqlline&gt; <span class="o">!</span>connect jdbc:calcite:model<span 
class="o">=</span>src/test/resources/model.json admin 
admin</code></pre></figure>
+sqlline&gt; <span class="o">!</span>connect jdbc:calcite:model<span 
class="o">=</span>target/test-classes/model.json admin 
admin</code></pre></figure>
 
 <p>(If you are running Windows, the command is <code 
class="highlighter-rouge">sqlline.bat</code>.)</p>
 
@@ -157,7 +158,7 @@ system tables are always present in Calcite, but the other 
tables are
 provided by the specific implementation of the schema; in this case,
 the <code>EMPS</code> and <code>DEPTS</code> tables are based on the
 <code>EMPS.csv</code> and <code>DEPTS.csv</code> files in the
-<code>resources/sales</code> directory.</p>
+<code>target/test-classes</code> directory.</p>
 
 <p>Let’s execute some queries on those tables, to show that Calcite is 
providing
 a full implementation of SQL. First, a table scan:</p>
@@ -226,7 +227,7 @@ format. Here is the model:</p>
       </span><span class="err">type</span><span class="p">:</span><span 
class="w"> </span><span class="err">'custom'</span><span 
class="p">,</span><span class="w">
       </span><span class="err">factory</span><span class="p">:</span><span 
class="w"> </span><span 
class="err">'org.apache.calcite.adapter.csv.CsvSchemaFactory'</span><span 
class="p">,</span><span class="w">
       </span><span class="err">operand</span><span class="p">:</span><span 
class="w"> </span><span class="p">{</span><span class="w">
-        </span><span class="err">directory</span><span class="p">:</span><span 
class="w"> </span><span class="err">'sales'</span><span class="w">
+        </span><span class="err">directory</span><span class="p">:</span><span 
class="w"> </span><span class="err">'target/test-classes/sales'</span><span 
class="w">
       </span><span class="p">}</span><span class="w">
     </span><span class="p">}</span><span class="w">
   </span><span class="p">]</span><span class="w">
@@ -275,8 +276,10 @@ and its sub-classes.</p>
 method in the <code>AbstractSchema</code> base class.</p>
 
 <figure class="highlight"><pre><code class="language-java" 
data-lang="java"><span class="kd">protected</span> <span 
class="n">Map</span><span class="o">&lt;</span><span 
class="n">String</span><span class="o">,</span> <span 
class="n">Table</span><span class="o">&gt;</span> <span 
class="nf">getTableMap</span><span class="o">()</span> <span class="o">{</span>
-  <span class="c1">// Look for files in the directory ending in ".csv", 
".csv.gz", ".json",</span>
-  <span class="c1">// ".json.gz".</span>
+  <span class="c1">// Look for files in the directory ending in ".csv", 
".csv.gz", ".json",
+</span>
+  <span class="c1">// ".json.gz".
+</span>
   <span class="n">File</span><span class="o">[]</span> <span 
class="n">files</span> <span class="o">=</span> <span 
class="n">directoryFile</span><span class="o">.</span><span 
class="na">listFiles</span><span class="o">(</span>
       <span class="k">new</span> <span class="nf">FilenameFilter</span><span 
class="o">()</span> <span class="o">{</span>
         <span class="kd">public</span> <span class="kt">boolean</span> <span 
class="nf">accept</span><span class="o">(</span><span class="n">File</span> 
<span class="n">dir</span><span class="o">,</span> <span 
class="n">String</span> <span class="n">name</span><span class="o">)</span> 
<span class="o">{</span>
@@ -289,7 +292,8 @@ method in the <code>AbstractSchema</code> base class.</p>
     <span class="n">System</span><span class="o">.</span><span 
class="na">out</span><span class="o">.</span><span 
class="na">println</span><span class="o">(</span><span class="s">"directory 
"</span> <span class="o">+</span> <span class="n">directoryFile</span> <span 
class="o">+</span> <span class="s">" not found"</span><span class="o">);</span>
     <span class="n">files</span> <span class="o">=</span> <span 
class="k">new</span> <span class="n">File</span><span class="o">[</span><span 
class="mi">0</span><span class="o">];</span>
   <span class="o">}</span>
-  <span class="c1">// Build a map from table name to table; each file becomes 
a table.</span>
+  <span class="c1">// Build a map from table name to table; each file becomes 
a table.
+</span>
   <span class="kd">final</span> <span class="n">ImmutableMap</span><span 
class="o">.</span><span class="na">Builder</span><span 
class="o">&lt;</span><span class="n">String</span><span class="o">,</span> 
<span class="n">Table</span><span class="o">&gt;</span> <span 
class="n">builder</span> <span class="o">=</span> <span 
class="n">ImmutableMap</span><span class="o">.</span><span 
class="na">builder</span><span class="o">();</span>
   <span class="k">for</span> <span class="o">(</span><span 
class="n">File</span> <span class="n">file</span> <span class="o">:</span> 
<span class="n">files</span><span class="o">)</span> <span class="o">{</span>
     <span class="n">String</span> <span class="n">tableName</span> <span 
class="o">=</span> <span class="n">trim</span><span class="o">(</span><span 
class="n">file</span><span class="o">.</span><span 
class="na">getName</span><span class="o">(),</span> <span 
class="s">".gz"</span><span class="o">);</span>
@@ -322,7 +326,7 @@ method in the <code>AbstractSchema</code> base class.</p>
 
 <p>The schema scans the directory and finds all files whose name ends
 with “.csv” and creates tables for them. In this case, the directory
-is <code>sales</code> and contains files
+is <code>target/test-classes/sales</code> and contains files
 <code>EMPS.csv</code> and <code>DEPTS.csv</code>, which these become
 the tables <code>EMPS</code> and <code>DEPTS</code>.</p>
 
@@ -355,7 +359,7 @@ clause that are not used in the final result.</p>
       </span><span class="err">type</span><span class="p">:</span><span 
class="w"> </span><span class="err">'custom'</span><span 
class="p">,</span><span class="w">
       </span><span class="err">factory</span><span class="p">:</span><span 
class="w"> </span><span 
class="err">'org.apache.calcite.adapter.csv.CsvSchemaFactory'</span><span 
class="p">,</span><span class="w">
       </span><span class="err">operand</span><span class="p">:</span><span 
class="w"> </span><span class="p">{</span><span class="w">
-        </span><span class="err">directory</span><span class="p">:</span><span 
class="w"> </span><span class="err">'sales'</span><span class="w">
+        </span><span class="err">directory</span><span class="p">:</span><span 
class="w"> </span><span class="err">'target/test-classes/sales'</span><span 
class="w">
       </span><span class="p">},</span><span class="w">
       </span><span class="err">tables</span><span class="p">:</span><span 
class="w"> </span><span class="p">[</span><span class="w">
         </span><span class="p">{</span><span class="w">
@@ -389,9 +393,11 @@ supply a list of lines rather than a single string:</p>
 <p>Now we have defined a view, we can use it in queries just as if it were a 
table:</p>
 
 <figure class="highlight"><pre><code class="language-sql" 
data-lang="sql"><span class="n">sqlline</span><span class="o">&gt;</span> <span 
class="k">SELECT</span> <span class="n">e</span><span class="p">.</span><span 
class="n">name</span><span class="p">,</span> <span class="n">d</span><span 
class="p">.</span><span class="n">name</span> <span class="k">FROM</span> <span 
class="n">female_emps</span> <span class="k">AS</span> <span class="n">e</span> 
<span class="k">JOIN</span> <span class= [...]
-<span class="o">+</span><span class="c1">--------+------------+</span>
+<span class="o">+</span><span class="c1">--------+------------+
+</span>
 <span class="o">|</span>  <span class="n">NAME</span>  <span 
class="o">|</span>    <span class="n">NAME</span>    <span class="o">|</span>
-<span class="o">+</span><span class="c1">--------+------------+</span>
+<span class="o">+</span><span class="c1">--------+------------+
+</span>
 <span class="o">|</span> <span class="n">Wilma</span>  <span 
class="o">|</span> <span class="n">Marketing</span>  <span class="o">|</span>
 <span class="o">+</span><span 
class="c1">--------+------------+</span></code></pre></figure>
 
@@ -414,7 +420,7 @@ They don’t need to live in a custom schema.</p>
           </span><span class="err">type</span><span class="p">:</span><span 
class="w"> </span><span class="err">'custom'</span><span 
class="p">,</span><span class="w">
           </span><span class="err">factory</span><span class="p">:</span><span 
class="w"> </span><span 
class="err">'org.apache.calcite.adapter.csv.CsvTableFactory'</span><span 
class="p">,</span><span class="w">
           </span><span class="err">operand</span><span class="p">:</span><span 
class="w"> </span><span class="p">{</span><span class="w">
-            </span><span class="err">file</span><span class="p">:</span><span 
class="w"> </span><span class="err">'sales/EMPS.csv.gz'</span><span 
class="p">,</span><span class="w">
+            </span><span class="err">file</span><span class="p">:</span><span 
class="w"> </span><span 
class="err">'target/test-classes/sales/EMPS.csv.gz'</span><span 
class="p">,</span><span class="w">
             </span><span class="err">flavor</span><span 
class="p">:</span><span class="w"> </span><span 
class="s2">"scannable"</span><span class="w">
           </span><span class="p">}</span><span class="w">
         </span><span class="p">}</span><span class="w">
@@ -425,11 +431,13 @@ They don’t need to live in a custom schema.</p>
 
 <p>We can query the table in the usual way:</p>
 
-<figure class="highlight"><pre><code class="language-sql" 
data-lang="sql"><span class="n">sqlline</span><span class="o">&gt;</span> <span 
class="o">!</span><span class="k">connect</span> <span 
class="n">jdbc</span><span class="p">:</span><span 
class="n">calcite</span><span class="p">:</span><span 
class="n">model</span><span class="o">=</span><span class="n">src</span><span 
class="o">/</span><span class="n">test</span><span class="o">/</span><span 
class="n">resources</span><span class="o" [...]
+<figure class="highlight"><pre><code class="language-sql" 
data-lang="sql"><span class="n">sqlline</span><span class="o">&gt;</span> <span 
class="o">!</span><span class="k">connect</span> <span 
class="n">jdbc</span><span class="p">:</span><span 
class="n">calcite</span><span class="p">:</span><span 
class="n">model</span><span class="o">=</span><span 
class="n">target</span><span class="o">/</span><span class="n">test</span><span 
class="o">-</span><span class="n">classes</span><span class="o [...]
 <span class="n">sqlline</span><span class="o">&gt;</span> <span 
class="k">SELECT</span> <span class="n">empno</span><span class="p">,</span> 
<span class="n">name</span> <span class="k">FROM</span> <span 
class="n">custom_table</span><span class="p">.</span><span 
class="n">emps</span><span class="p">;</span>
-<span class="o">+</span><span class="c1">--------+--------+</span>
+<span class="o">+</span><span class="c1">--------+--------+
+</span>
 <span class="o">|</span> <span class="n">EMPNO</span>  <span 
class="o">|</span>  <span class="n">NAME</span>  <span class="o">|</span>
-<span class="o">+</span><span class="c1">--------+--------+</span>
+<span class="o">+</span><span class="c1">--------+--------+
+</span>
 <span class="o">|</span> <span class="mi">100</span>    <span 
class="o">|</span> <span class="n">Fred</span>   <span class="o">|</span>
 <span class="o">|</span> <span class="mi">110</span>    <span 
class="o">|</span> <span class="n">Eric</span>   <span class="o">|</span>
 <span class="o">|</span> <span class="mi">110</span>    <span 
class="o">|</span> <span class="n">John</span>   <span class="o">|</span>
@@ -503,19 +511,24 @@ schema, and then you define some rules to make the access 
efficient.</p>
 a subset of columns from a CSV file. Let’s run the same query against two very
 similar schemas:</p>
 
-<figure class="highlight"><pre><code class="language-sql" 
data-lang="sql"><span class="n">sqlline</span><span class="o">&gt;</span> <span 
class="o">!</span><span class="k">connect</span> <span 
class="n">jdbc</span><span class="p">:</span><span 
class="n">calcite</span><span class="p">:</span><span 
class="n">model</span><span class="o">=</span><span class="n">src</span><span 
class="o">/</span><span class="n">test</span><span class="o">/</span><span 
class="n">resources</span><span class="o" [...]
+<figure class="highlight"><pre><code class="language-sql" 
data-lang="sql"><span class="n">sqlline</span><span class="o">&gt;</span> <span 
class="o">!</span><span class="k">connect</span> <span 
class="n">jdbc</span><span class="p">:</span><span 
class="n">calcite</span><span class="p">:</span><span 
class="n">model</span><span class="o">=</span><span 
class="n">target</span><span class="o">/</span><span class="n">test</span><span 
class="o">-</span><span class="n">classes</span><span class="o [...]
 <span class="n">sqlline</span><span class="o">&gt;</span> <span 
class="k">explain</span> <span class="n">plan</span> <span class="k">for</span> 
<span class="k">select</span> <span class="n">name</span> <span 
class="k">from</span> <span class="n">emps</span><span class="p">;</span>
-<span class="o">+</span><span 
class="c1">-----------------------------------------------------+</span>
+<span class="o">+</span><span 
class="c1">-----------------------------------------------------+
+</span>
 <span class="o">|</span> <span class="n">PLAN</span>                           
                     <span class="o">|</span>
-<span class="o">+</span><span 
class="c1">-----------------------------------------------------+</span>
+<span class="o">+</span><span 
class="c1">-----------------------------------------------------+
+</span>
 <span class="o">|</span> <span class="n">EnumerableCalcRel</span><span 
class="p">(</span><span class="n">expr</span><span class="o">#</span><span 
class="mi">0</span><span class="p">..</span><span class="mi">9</span><span 
class="o">=</span><span class="p">[</span><span class="err">{</span><span 
class="n">inputs</span><span class="err">}</span><span class="p">],</span> 
<span class="n">NAME</span><span class="o">=</span><span 
class="p">[</span><span class="err">$</span><span class="n">t1</s [...]
 <span class="o">|</span>   <span class="n">EnumerableTableScan</span><span 
class="p">(</span><span class="k">table</span><span class="o">=</span><span 
class="p">[[</span><span class="n">SALES</span><span class="p">,</span> <span 
class="n">EMPS</span><span class="p">]])</span>        <span class="o">|</span>
-<span class="o">+</span><span 
class="c1">-----------------------------------------------------+</span>
-<span class="n">sqlline</span><span class="o">&gt;</span> <span 
class="o">!</span><span class="k">connect</span> <span 
class="n">jdbc</span><span class="p">:</span><span 
class="n">calcite</span><span class="p">:</span><span 
class="n">model</span><span class="o">=</span><span class="n">src</span><span 
class="o">/</span><span class="n">test</span><span class="o">/</span><span 
class="n">resources</span><span class="o">/</span><span 
class="n">smart</span><span class="p">.</span><span class=" [...]
+<span class="o">+</span><span 
class="c1">-----------------------------------------------------+
+</span>
+<span class="n">sqlline</span><span class="o">&gt;</span> <span 
class="o">!</span><span class="k">connect</span> <span 
class="n">jdbc</span><span class="p">:</span><span 
class="n">calcite</span><span class="p">:</span><span 
class="n">model</span><span class="o">=</span><span 
class="n">target</span><span class="o">/</span><span class="n">test</span><span 
class="o">-</span><span class="n">classes</span><span class="o">/</span><span 
class="n">smart</span><span class="p">.</span><span class= [...]
 <span class="n">sqlline</span><span class="o">&gt;</span> <span 
class="k">explain</span> <span class="n">plan</span> <span class="k">for</span> 
<span class="k">select</span> <span class="n">name</span> <span 
class="k">from</span> <span class="n">emps</span><span class="p">;</span>
-<span class="o">+</span><span 
class="c1">-----------------------------------------------------+</span>
+<span class="o">+</span><span 
class="c1">-----------------------------------------------------+
+</span>
 <span class="o">|</span> <span class="n">PLAN</span>                           
                     <span class="o">|</span>
-<span class="o">+</span><span 
class="c1">-----------------------------------------------------+</span>
+<span class="o">+</span><span 
class="c1">-----------------------------------------------------+
+</span>
 <span class="o">|</span> <span class="n">EnumerableCalcRel</span><span 
class="p">(</span><span class="n">expr</span><span class="o">#</span><span 
class="mi">0</span><span class="p">..</span><span class="mi">9</span><span 
class="o">=</span><span class="p">[</span><span class="err">{</span><span 
class="n">inputs</span><span class="err">}</span><span class="p">],</span> 
<span class="n">NAME</span><span class="o">=</span><span 
class="p">[</span><span class="err">$</span><span class="n">t1</s [...]
 <span class="o">|</span>   <span class="n">CsvTableScan</span><span 
class="p">(</span><span class="k">table</span><span class="o">=</span><span 
class="p">[[</span><span class="n">SALES</span><span class="p">,</span> <span 
class="n">EMPS</span><span class="p">]])</span>               <span 
class="o">|</span>
 <span class="o">+</span><span 
class="c1">-----------------------------------------------------+</span></code></pre></figure>
@@ -559,7 +572,8 @@ but we have created a distinctive sub-type that will cause 
rules to fire.</p>
     <span class="kd">final</span> <span class="n">CsvTableScan</span> <span 
class="n">scan</span> <span class="o">=</span> <span class="n">call</span><span 
class="o">.</span><span class="na">rel</span><span class="o">(</span><span 
class="mi">1</span><span class="o">);</span>
     <span class="kt">int</span><span class="o">[]</span> <span 
class="n">fields</span> <span class="o">=</span> <span 
class="n">getProjectFields</span><span class="o">(</span><span 
class="n">project</span><span class="o">.</span><span 
class="na">getProjects</span><span class="o">());</span>
     <span class="k">if</span> <span class="o">(</span><span 
class="n">fields</span> <span class="o">==</span> <span 
class="kc">null</span><span class="o">)</span> <span class="o">{</span>
-      <span class="c1">// Project contains expressions more complex than just 
field references.</span>
+      <span class="c1">// Project contains expressions more complex than just 
field references.
+</span>
       <span class="k">return</span><span class="o">;</span>
     <span class="o">}</span>
     <span class="n">call</span><span class="o">.</span><span 
class="na">transformTo</span><span class="o">(</span>
@@ -577,7 +591,8 @@ but we have created a distinctive sub-type that will cause 
rules to fire.</p>
       <span class="k">if</span> <span class="o">(</span><span 
class="n">exp</span> <span class="k">instanceof</span> <span 
class="n">RexInputRef</span><span class="o">)</span> <span class="o">{</span>
         <span class="n">fields</span><span class="o">[</span><span 
class="n">i</span><span class="o">]</span> <span class="o">=</span> <span 
class="o">((</span><span class="n">RexInputRef</span><span class="o">)</span> 
<span class="n">exp</span><span class="o">).</span><span 
class="na">getIndex</span><span class="o">();</span>
       <span class="o">}</span> <span class="k">else</span> <span 
class="o">{</span>
-        <span class="k">return</span> <span class="kc">null</span><span 
class="o">;</span> <span class="c1">// not a simple projection</span>
+        <span class="k">return</span> <span class="kc">null</span><span 
class="o">;</span> <span class="c1">// not a simple projection
+</span>
       <span class="o">}</span>
     <span class="o">}</span>
     <span class="k">return</span> <span class="n">fields</span><span 
class="o">;</span>
@@ -737,6 +752,7 @@ initial implementations.</p>
 <p>There are many other ways to extend Calcite not yet described in this 
tutorial.
 The <a href="adapter.html">adapter specification</a> describes the APIs 
involved.</p>
 
+
           
 
 
diff --git a/news/2019/09/11/release-1.21.0/index.html 
b/news/2019/09/11/release-1.21.0/index.html
index 1ff4ab7..bd21973 100644
--- a/news/2019/09/11/release-1.21.0/index.html
+++ b/news/2019/09/11/release-1.21.0/index.html
@@ -120,7 +120,7 @@
     
     
     
-    <a href="https://github.com/zabetak"; class="post-author">
+    <a href="https://people.apache.org/~zabetak/"; class="post-author">
       <img src="https://github.com/zabetak.png";
            class="avatar" alt="zabetak avatar"
            width="24" height="24">
diff --git a/news/index.html b/news/index.html
index 1958d48..13e43f7 100644
--- a/news/index.html
+++ b/news/index.html
@@ -125,7 +125,7 @@
     
     
     
-    <a href="https://github.com/zabetak"; class="post-author">
+    <a href="https://people.apache.org/~zabetak/"; class="post-author">
       <img src="https://github.com/zabetak.png";
            class="avatar" alt="zabetak avatar"
            width="24" height="24">
diff --git a/news/releases/index.html b/news/releases/index.html
index 88ae7c0..4eccee5 100644
--- a/news/releases/index.html
+++ b/news/releases/index.html
@@ -125,7 +125,7 @@
     
     
     
-    <a href="https://github.com/zabetak"; class="post-author">
+    <a href="https://people.apache.org/~zabetak/"; class="post-author">
       <img src="https://github.com/zabetak.png";
            class="avatar" alt="zabetak avatar"
            width="24" height="24">

Reply via email to