You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by jh...@apache.org on 2015/05/29 21:47:56 UTC

svn commit: r1682538 [5/6] - in /incubator/calcite/site: develop/ docs/ news/ news/2015/01/31/release-1.0.0-incubating/ news/2015/03/13/release-1.1.0-incubating/ news/2015/04/07/release-1.2.0-incubating/ news/2015/04/24/new-committers/ news/2015/05/29/...

Modified: incubator/calcite/site/docs/tutorial.html
URL: http://svn.apache.org/viewvc/incubator/calcite/site/docs/tutorial.html?rev=1682538&r1=1682537&r2=1682538&view=diff
==============================================================================
--- incubator/calcite/site/docs/tutorial.html (original)
+++ incubator/calcite/site/docs/tutorial.html Fri May 29 19:47:55 2015
@@ -626,29 +626,30 @@ capability.</p>
 
 <p>CSV also serves as a template for building adapters to other
 data formats. Even though there are not many lines of code, it covers
-several important concepts:
-* user-defined schema using SchemaFactory and Schema interfaces;
-* declaring schemas in a model JSON file;
-* declaring views in a model JSON file;
-* user-defined table using the Table interface;
-* determining the record type of a table;
-* a simple implementation of Table, using the ScannableTable interface, that
-  enumerates all rows directly;
-* a more advanced implementation that implements FilterableTable, and can
-  filter out rows according to simple predicates;
-* advanced implementation of Table, using TranslatableTable, that translates
-  to relational operators using planner rules.</p>
+several important concepts:</p>
+
+<ul>
+  <li>user-defined schema using SchemaFactory and Schema interfaces;</li>
+  <li>declaring schemas in a model JSON file;</li>
+  <li>declaring views in a model JSON file;</li>
+  <li>user-defined table using the Table interface;</li>
+  <li>determining the record type of a table;</li>
+  <li>a simple implementation of Table, using the ScannableTable interface, that
+enumerates all rows directly;</li>
+  <li>a more advanced implementation that implements FilterableTable, and can
+filter out rows according to simple predicates;</li>
+  <li>advanced implementation of Table, using TranslatableTable, that translates
+to relational operators using planner rules.</li>
+</ul>
 
 <h2 id="download-and-build">Download and build</h2>
 
 <p>You need Java (1.7 or higher; 1.8 preferred), git and maven (3.2.1 or later).</p>
 
-<p><code>bash
-$ git clone https://github.com/apache/incubator-calcite.git
-$ cd incubator-calcite
-$ mvn install -DskipTests -Dcheckstyle.skip=true
-$ cd example/csv
-</code></p>
+<div class="highlight"><pre><code class="language-bash" data-lang="bash"><span class="nv">$ </span>git clone https://github.com/apache/incubator-calcite.git
+<span class="nv">$ </span><span class="nb">cd </span>incubator-calcite
+<span class="nv">$ </span>mvn install -DskipTests -Dcheckstyle.skip<span class="o">=</span><span class="nb">true</span>
+<span class="nv">$ </span><span class="nb">cd </span>example/csv</code></pre></div>
 
 <h2 id="first-queries">First queries</h2>
 
@@ -656,27 +657,23 @@ $ cd example/csv
 <a href="https://github.com/julianhyde/sqlline">sqlline</a>, a SQL shell
 that is included in this project.</p>
 
-<p><code>bash
-$ ./sqlline
-sqlline&gt; !connect jdbc:calcite:model=target/test-classes/model.json admin admin
-</code></p>
+<div class="highlight"><pre><code class="language-bash" data-lang="bash"><span class="nv">$ </span>./sqlline
+sqlline&gt; !connect jdbc:calcite:model<span class="o">=</span>target/test-classes/model.json admin admin</code></pre></div>
 
 <p>(If you are running Windows, the command is <code>sqlline.bat</code>.)</p>
 
 <p>Execute a metadata query:</p>
 
-<p><code>bash
-sqlline&gt; !tables
+<div class="highlight"><pre><code class="language-bash" data-lang="bash">sqlline&gt; !tables
 +------------+--------------+-------------+---------------+----------+------+
-| TABLE_CAT  | TABLE_SCHEM  | TABLE_NAME  |  TABLE_TYPE   | REMARKS  | TYPE |
+<span class="p">|</span> TABLE_CAT  <span class="p">|</span> TABLE_SCHEM  <span class="p">|</span> TABLE_NAME  <span class="p">|</span>  TABLE_TYPE   <span class="p">|</span> REMARKS  <span class="p">|</span> TYPE <span class="p">|</span>
 +------------+--------------+-------------+---------------+----------+------+
-| null       | SALES        | DEPTS       | TABLE         | null     | null |
-| null       | SALES        | EMPS        | TABLE         | null     | null |
-| null       | SALES        | HOBBIES     | TABLE         | null     | null |
-| null       | metadata     | COLUMNS     | SYSTEM_TABLE  | null     | null |
-| null       | metadata     | TABLES      | SYSTEM_TABLE  | null     | null |
-+------------+--------------+-------------+---------------+----------+------+
-</code></p>
+<span class="p">|</span> null       <span class="p">|</span> SALES        <span class="p">|</span> DEPTS       <span class="p">|</span> TABLE         <span class="p">|</span> null     <span class="p">|</span> null <span class="p">|</span>
+<span class="p">|</span> null       <span class="p">|</span> SALES        <span class="p">|</span> EMPS        <span class="p">|</span> TABLE         <span class="p">|</span> null     <span class="p">|</span> null <span class="p">|</span>
+<span class="p">|</span> null       <span class="p">|</span> SALES        <span class="p">|</span> HOBBIES     <span class="p">|</span> TABLE         <span class="p">|</span> null     <span class="p">|</span> null <span class="p">|</span>
+<span class="p">|</span> null       <span class="p">|</span> metadata     <span class="p">|</span> COLUMNS     <span class="p">|</span> SYSTEM_TABLE  <span class="p">|</span> null     <span class="p">|</span> null <span class="p">|</span>
+<span class="p">|</span> null       <span class="p">|</span> metadata     <span class="p">|</span> TABLES      <span class="p">|</span> SYSTEM_TABLE  <span class="p">|</span> null     <span class="p">|</span> null <span class="p">|</span>
++------------+--------------+-------------+---------------+----------+------+</code></pre></div>
 
 <p>(JDBC experts, note: sqlline’s <code>!tables</code> command is just executing
 <a href="http://docs.oracle.com/javase/7/docs/api/java/sql/DatabaseMetaData.html#getTables(java.lang.String, java.lang.String, java.lang.String, java.lang.String[])"><code>DatabaseMetaData.getTables()</code></a>
@@ -696,44 +693,38 @@ the <code>EMPS</code> and <code>DEPTS</c
 <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>
 
-<p><code>bash
-sqlline&gt; SELECT * FROM emps;
-+--------+--------+---------+---------+----------------+--------+-------+---+
-| EMPNO  |  NAME  | DEPTNO  | GENDER  |      CITY      | EMPID  |  AGE  | S |
+<div class="highlight"><pre><code class="language-bash" data-lang="bash">sqlline&gt; SELECT * FROM emps<span class="p">;</span>
 +--------+--------+---------+---------+----------------+--------+-------+---+
-| 100    | Fred   | 10      |         |                | 30     | 25    | t |
-| 110    | Eric   | 20      | M       | San Francisco  | 3      | 80    | n |
-| 110    | John   | 40      | M       | Vancouver      | 2      | null  | f |
-| 120    | Wilma  | 20      | F       |                | 1      | 5     | n |
-| 130    | Alice  | 40      | F       | Vancouver      | 2      | null  | f |
+<span class="p">|</span> EMPNO  <span class="p">|</span>  NAME  <span class="p">|</span> DEPTNO  <span class="p">|</span> GENDER  <span class="p">|</span>      CITY      <span class="p">|</span> EMPID  <span class="p">|</span>  AGE  <span class="p">|</span> S <span class="p">|</span>
 +--------+--------+---------+---------+----------------+--------+-------+---+
-</code></p>
+<span class="p">|</span> <span class="m">100</span>    <span class="p">|</span> Fred   <span class="p">|</span> <span class="m">10</span>      <span class="p">|</span>         <span class="p">|</span>                <span class="p">|</span> <span class="m">30</span>     <span class="p">|</span> <span class="m">25</span>    <span class="p">|</span> t <span class="p">|</span>
+<span class="p">|</span> <span class="m">110</span>    <span class="p">|</span> Eric   <span class="p">|</span> <span class="m">20</span>      <span class="p">|</span> M       <span class="p">|</span> San Francisco  <span class="p">|</span> <span class="m">3</span>      <span class="p">|</span> <span class="m">80</span>    <span class="p">|</span> n <span class="p">|</span>
+<span class="p">|</span> <span class="m">110</span>    <span class="p">|</span> John   <span class="p">|</span> <span class="m">40</span>      <span class="p">|</span> M       <span class="p">|</span> Vancouver      <span class="p">|</span> <span class="m">2</span>      <span class="p">|</span> null  <span class="p">|</span> f <span class="p">|</span>
+<span class="p">|</span> <span class="m">120</span>    <span class="p">|</span> Wilma  <span class="p">|</span> <span class="m">20</span>      <span class="p">|</span> F       <span class="p">|</span>                <span class="p">|</span> <span class="m">1</span>      <span class="p">|</span> <span class="m">5</span>     <span class="p">|</span> n <span class="p">|</span>
+<span class="p">|</span> <span class="m">130</span>    <span class="p">|</span> Alice  <span class="p">|</span> <span class="m">40</span>      <span class="p">|</span> F       <span class="p">|</span> Vancouver      <span class="p">|</span> <span class="m">2</span>      <span class="p">|</span> null  <span class="p">|</span> f <span class="p">|</span>
++--------+--------+---------+---------+----------------+--------+-------+---+</code></pre></div>
 
 <p>Now JOIN and GROUP BY:</p>
 
-<p><code>bash
-sqlline&gt; SELECT d.name, COUNT(*)
-. . . .&gt; FROM emps AS e JOIN depts AS d ON e.deptno = d.deptno
-. . . .&gt; GROUP BY d.name;
-+------------+---------+
-|    NAME    | EXPR$1  |
+<div class="highlight"><pre><code class="language-bash" data-lang="bash">sqlline&gt; SELECT d.name, COUNT<span class="o">(</span>*<span class="o">)</span>
+. . . .&gt; FROM emps AS e JOIN depts AS d ON e.deptno <span class="o">=</span> d.deptno
+. . . .&gt; GROUP BY d.name<span class="p">;</span>
 +------------+---------+
-| Sales      | 1       |
-| Marketing  | 2       |
+<span class="p">|</span>    NAME    <span class="p">|</span> EXPR<span class="nv">$1</span>  <span class="p">|</span>
 +------------+---------+
-</code></p>
+<span class="p">|</span> Sales      <span class="p">|</span> <span class="m">1</span>       <span class="p">|</span>
+<span class="p">|</span> Marketing  <span class="p">|</span> <span class="m">2</span>       <span class="p">|</span>
++------------+---------+</code></pre></div>
 
 <p>Last, the VALUES operator generates a single row, and is a convenient
 way to test expressions and SQL built-in functions:</p>
 
-<p><code>bash
-sqlline&gt; VALUES CHAR_LENGTH('Hello, ' || 'world!');
+<div class="highlight"><pre><code class="language-bash" data-lang="bash">sqlline&gt; VALUES CHAR_LENGTH<span class="o">(</span><span class="s1">&#39;Hello, &#39;</span> <span class="o">||</span> <span class="s1">&#39;world!&#39;</span><span class="o">)</span><span class="p">;</span>
 +---------+
-| EXPR$0  |
+<span class="p">|</span> EXPR<span class="nv">$0</span>  <span class="p">|</span>
 +---------+
-| 13      |
-+---------+
-</code></p>
+<span class="p">|</span> <span class="m">13</span>      <span class="p">|</span>
++---------+</code></pre></div>
 
 <p>Calcite has many other SQL features. We don’t have time to cover them
 here. Write some more queries to experiment.</p>
@@ -757,113 +748,108 @@ executed. Now let’s look at those s
 <p>On the JDBC connect string we gave the path of a model in JSON
 format. Here is the model:</p>
 
-<p><code>json
-{
-  version: '1.0',
-  defaultSchema: 'SALES',
-  schemas: [
-    {
-      name: 'SALES',
-      type: 'custom',
-      factory: 'org.apache.calcite.adapter.csv.CsvSchemaFactory',
-      operand: {
-        directory: 'target/test-classes/sales'
-      }
-    }
-  ]
-}
-</code></p>
+<div class="highlight"><pre><code class="language-json" data-lang="json"><span class="p">{</span>
+  <span class="err">version:</span> <span class="err">&#39;1.0&#39;,</span>
+  <span class="err">defaultSchema:</span> <span class="err">&#39;SALES&#39;,</span>
+  <span class="err">schemas:</span> <span class="err">[</span>
+    <span class="err">{</span>
+      <span class="err">name:</span> <span class="err">&#39;SALES&#39;,</span>
+      <span class="err">type:</span> <span class="err">&#39;custom&#39;,</span>
+      <span class="err">factory:</span> <span class="err">&#39;org.apache.calcite.adapter.csv.CsvSchemaFactory&#39;,</span>
+      <span class="err">operand:</span> <span class="err">{</span>
+        <span class="err">directory:</span> <span class="err">&#39;target/test-classes/sales&#39;</span>
+      <span class="p">}</span>
+    <span class="err">}</span>
+  <span class="err">]</span>
+<span class="err">}</span></code></pre></div>
 
 <p>The model defines a single schema called ‘SALES’. The schema is
 powered by a plugin class,
-<a href="../example/csv/src/main/java/org/apache/calcite/adapter/csv/CsvSchemaFactory.java">org.apache.calcite.adapter.csv.CsvSchemaFactory</a>,
+<a href="http://github.com/apache/incubator-calcite/blob/master/example/csv/src/main/java/org/apache/calcite/adapter/csv/CsvSchemaFactory.java">org.apache.calcite.adapter.csv.CsvSchemaFactory</a>,
 which is part of the
 calcite-example-csv project and implements the Calcite interface
-<a href="http://www.hydromatic.net/calcite/apidocs/org/apache/calcite/schema/SchemaFactory.html">SchemaFactory</a>.
+<a href="/apidocs/org/apache/calcite/schema/SchemaFactory.html">SchemaFactory</a>.
 Its <code>create</code> method instantiates a
 schema, passing in the <code>directory</code> argument from the model file:</p>
 
-<p><code>java
-public Schema create(SchemaPlus parentSchema, String name,
-    Map&lt;String, Object&gt; operand) {
-  String directory = (String) operand.get("directory");
-  String flavorName = (String) operand.get("flavor");
-  CsvTable.Flavor flavor;
-  if (flavorName == null) {
-    flavor = CsvTable.Flavor.SCANNABLE;
-  } else {
-    flavor = CsvTable.Flavor.valueOf(flavorName.toUpperCase());
-  }
-  return new CsvSchema(
-      new File(directory),
-      flavor);
-}
-</code></p>
+<div class="highlight"><pre><code class="language-java" data-lang="java"><span class="kd">public</span> <span class="n">Schema</span> <span class="nf">create</span><span class="o">(</span><span class="n">SchemaPlus</span> <span class="n">parentSchema</span><span class="o">,</span> <span class="n">String</span> <span class="n">name</span><span class="o">,</span>
+    <span class="n">Map</span><span class="o">&lt;</span><span class="n">String</span><span class="o">,</span> <span class="n">Object</span><span class="o">&gt;</span> <span class="n">operand</span><span class="o">)</span> <span class="o">{</span>
+  <span class="n">String</span> <span class="n">directory</span> <span class="o">=</span> <span class="o">(</span><span class="n">String</span><span class="o">)</span> <span class="n">operand</span><span class="o">.</span><span class="na">get</span><span class="o">(</span><span class="s">&quot;directory&quot;</span><span class="o">);</span>
+  <span class="n">String</span> <span class="n">flavorName</span> <span class="o">=</span> <span class="o">(</span><span class="n">String</span><span class="o">)</span> <span class="n">operand</span><span class="o">.</span><span class="na">get</span><span class="o">(</span><span class="s">&quot;flavor&quot;</span><span class="o">);</span>
+  <span class="n">CsvTable</span><span class="o">.</span><span class="na">Flavor</span> <span class="n">flavor</span><span class="o">;</span>
+  <span class="k">if</span> <span class="o">(</span><span class="n">flavorName</span> <span class="o">==</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span>
+    <span class="n">flavor</span> <span class="o">=</span> <span class="n">CsvTable</span><span class="o">.</span><span class="na">Flavor</span><span class="o">.</span><span class="na">SCANNABLE</span><span class="o">;</span>
+  <span class="o">}</span> <span class="k">else</span> <span class="o">{</span>
+    <span class="n">flavor</span> <span class="o">=</span> <span class="n">CsvTable</span><span class="o">.</span><span class="na">Flavor</span><span class="o">.</span><span class="na">valueOf</span><span class="o">(</span><span class="n">flavorName</span><span class="o">.</span><span class="na">toUpperCase</span><span class="o">());</span>
+  <span class="o">}</span>
+  <span class="k">return</span> <span class="k">new</span> <span class="nf">CsvSchema</span><span class="o">(</span>
+      <span class="k">new</span> <span class="nf">File</span><span class="o">(</span><span class="n">directory</span><span class="o">),</span>
+      <span class="n">flavor</span><span class="o">);</span>
+<span class="o">}</span></code></pre></div>
 
 <p>Driven by the model, the schema factory instantiates a single schema
 called ‘SALES’.  The schema is an instance of
-<a href="../example/csv/src/main/java/org/apache/calcite/adapter/csv/CsvSchema.java">org.apache.calcite.adapter.csv.CsvSchema</a>
-and implements the Calcite interface <a href="http://www.hydromatic.net/calcite/apidocs/org/apache/calcite/schema/Schema.html">Schema</a>.</p>
+<a href="http://github.com/apache/incubator-calcite/blob/master/example/csv/src/main/java/org/apache/calcite/adapter/csv/CsvSchema.java">org.apache.calcite.adapter.csv.CsvSchema</a>
+and implements the Calcite interface
+<a href="/calcite/apidocs/org/apache/calcite/schema/Schema.html">Schema</a>.</p>
 
 <p>A schema’s job is to produce a list of tables. (It can also list sub-schemas and
 table-functions, but these are advanced features and calcite-example-csv does
 not support them.) The tables implement Calcite’s
-<a href="http://www.hydromatic.net/calcite/apidocs/org/apache/calcite/schema/Table.html">Table</a>
+<a href="/apidocs/org/apache/calcite/schema/Table.html">Table</a>
 interface. <code>CsvSchema</code> produces tables that are instances of
-<a href="../example/csv/src/main/java/org/apache/calcite/adapter/csv/CsvTable.java">CsvTable</a>
+<a href="http://github.com/apache/incubator-calcite/blob/master/example/csv/src/main/java/org/apache/calcite/adapter/csv/CsvTable.java">CsvTable</a>
 and its sub-classes.</p>
 
 <p>Here is the relevant code from <code>CsvSchema</code>, overriding the
-<code><a href="http://www.hydromatic.net/calcite/apidocs/org/apache/calcite/schema/impl/AbstractSchema.html#getTableMap()">getTableMap()</a></code>
+<code><a href="/apidocs/org/apache/calcite/schema/impl/AbstractSchema.html#getTableMap()">getTableMap()</a></code>
 method in the <code>AbstractSchema</code> base class.</p>
 
-<p>```java
-protected Map&lt;String, Table&gt; getTableMap() {
-  // Look for files in the directory ending in “.csv”, “.csv.gz”, “.json”,
-  // “.json.gz”.
-  File[] files = directoryFile.listFiles(
-      new FilenameFilter() {
-        public boolean accept(File dir, String name) {
-          final String nameSansGz = trim(name, “.gz”);
-          return nameSansGz.endsWith(“.csv”)
-              || nameSansGz.endsWith(“.json”);
-        }
-      });
-  if (files == null) {
-    System.out.println(“directory “ + directoryFile + “ not found”);
-    files = new File[0];
-  }
-  // Build a map from table name to table; each file becomes a table.
-  final ImmutableMap.Builder&lt;String, Table&gt; builder = ImmutableMap.builder();
-  for (File file : files) {
-    String tableName = trim(file.getName(), “.gz”);
-    final String tableNameSansJson = trimOrNull(tableName, “.json”);
-    if (tableNameSansJson != null) {
-      JsonTable table = new JsonTable(file);
-      builder.put(tableNameSansJson, table);
-      continue;
-    }
-    tableName = trim(tableName, “.csv”);
-    final Table table = createTable(file);
-    builder.put(tableName, table);
-  }
-  return builder.build();
-}</p>
-
-<p>/** Creates different sub-type of table based on the “flavor” attribute. */
-private Table createTable(File file) {
-  switch (flavor) {
-  case TRANSLATABLE:
-    return new CsvTranslatableTable(file, null);
-  case SCANNABLE:
-    return new CsvScannableTable(file, null);
-  case FILTERABLE:
-    return new CsvFilterableTable(file, null);
-  default:
-    throw new AssertionError(“Unknown flavor “ + flavor);
-  }
-}
-```</p>
+<div 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 &quot;.csv&quot;, &quot;.csv.gz&quot;, &quot;.json&quot;,</span>
+  <span class="c1">// &quot;.json.gz&quot;.</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>
+          <span class="kd">final</span> <span class="n">String</span> <span class="n">nameSansGz</span> <span class="o">=</span> <span class="n">trim</span><span class="o">(</span><span class="n">name</span><span class="o">,</span> <span class="s">&quot;.gz&quot;</span><span class="o">);</span>
+          <span class="k">return</span> <span class="n">nameSansGz</span><span class="o">.</span><span class="na">endsWith</span><span class="o">(</span><span class="s">&quot;.csv&quot;</span><span class="o">)</span>
+              <span class="o">||</span> <span class="n">nameSansGz</span><span class="o">.</span><span class="na">endsWith</span><span class="o">(</span><span class="s">&quot;.json&quot;</span><span class="o">);</span>
+        <span class="o">}</span>
+      <span class="o">});</span>
+  <span class="k">if</span> <span class="o">(</span><span class="n">files</span> <span class="o">==</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span>
+    <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">&quot;directory &quot;</span> <span class="o">+</span> <span class="n">directoryFile</span> <span class="o">+</span> <span class="s">&quot; not found&quot;</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="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">&quot;.gz&quot;</span><span class="o">);</span>
+    <span class="kd">final</span> <span class="n">String</span> <span class="n">tableNameSansJson</span> <span class="o">=</span> <span class="n">trimOrNull</span><span class="o">(</span><span class="n">tableName</span><span class="o">,</span> <span class="s">&quot;.json&quot;</span><span class="o">);</span>
+    <span class="k">if</span> <span class="o">(</span><span class="n">tableNameSansJson</span> <span class="o">!=</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span>
+      <span class="n">JsonTable</span> <span class="n">table</span> <span class="o">=</span> <span class="k">new</span> <span class="nf">JsonTable</span><span class="o">(</span><span class="n">file</span><span class="o">);</span>
+      <span class="n">builder</span><span class="o">.</span><span class="na">put</span><span class="o">(</span><span class="n">tableNameSansJson</span><span class="o">,</span> <span class="n">table</span><span class="o">);</span>
+      <span class="k">continue</span><span class="o">;</span>
+    <span class="o">}</span>
+    <span class="n">tableName</span> <span class="o">=</span> <span class="n">trim</span><span class="o">(</span><span class="n">tableName</span><span class="o">,</span> <span class="s">&quot;.csv&quot;</span><span class="o">);</span>
+    <span class="kd">final</span> <span class="n">Table</span> <span class="n">table</span> <span class="o">=</span> <span class="n">createTable</span><span class="o">(</span><span class="n">file</span><span class="o">);</span>
+    <span class="n">builder</span><span class="o">.</span><span class="na">put</span><span class="o">(</span><span class="n">tableName</span><span class="o">,</span> <span class="n">table</span><span class="o">);</span>
+  <span class="o">}</span>
+  <span class="k">return</span> <span class="n">builder</span><span class="o">.</span><span class="na">build</span><span class="o">();</span>
+<span class="o">}</span>
+
+<span class="cm">/** Creates different sub-type of table based on the &quot;flavor&quot; attribute. */</span>
+<span class="kd">private</span> <span class="n">Table</span> <span class="nf">createTable</span><span class="o">(</span><span class="n">File</span> <span class="n">file</span><span class="o">)</span> <span class="o">{</span>
+  <span class="k">switch</span> <span class="o">(</span><span class="n">flavor</span><span class="o">)</span> <span class="o">{</span>
+  <span class="k">case</span> <span class="nl">TRANSLATABLE:</span>
+    <span class="k">return</span> <span class="k">new</span> <span class="nf">CsvTranslatableTable</span><span class="o">(</span><span class="n">file</span><span class="o">,</span> <span class="kc">null</span><span class="o">);</span>
+  <span class="k">case</span> <span class="nl">SCANNABLE:</span>
+    <span class="k">return</span> <span class="k">new</span> <span class="nf">CsvScannableTable</span><span class="o">(</span><span class="n">file</span><span class="o">,</span> <span class="kc">null</span><span class="o">);</span>
+  <span class="k">case</span> <span class="nl">FILTERABLE:</span>
+    <span class="k">return</span> <span class="k">new</span> <span class="nf">CsvFilterableTable</span><span class="o">(</span><span class="n">file</span><span class="o">,</span> <span class="kc">null</span><span class="o">);</span>
+  <span class="k">default</span><span class="o">:</span>
+    <span class="k">throw</span> <span class="k">new</span> <span class="nf">AssertionError</span><span class="o">(</span><span class="s">&quot;Unknown flavor &quot;</span> <span class="o">+</span> <span class="n">flavor</span><span class="o">);</span>
+  <span class="o">}</span>
+<span class="o">}</span></code></pre></div>
 
 <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
@@ -891,29 +877,27 @@ clause that are not used in the final re
 
 <p>Here is a schema that defines a view:</p>
 
-<p><code>json
-{
-  version: '1.0',
-  defaultSchema: 'SALES',
-  schemas: [
-    {
-      name: 'SALES',
-      type: 'custom',
-      factory: 'org.apache.calcite.adapter.csv.CsvSchemaFactory',
-      operand: {
-        directory: 'target/test-classes/sales'
-      },
-      tables: [
-        {
-          name: 'FEMALE_EMPS',
-          type: 'view',
-          sql: 'SELECT * FROM emps WHERE gender = \'F\''
-        }
-      ]
-    }
-  ]
-}
-</code></p>
+<div class="highlight"><pre><code class="language-json" data-lang="json"><span class="p">{</span>
+  <span class="err">version:</span> <span class="err">&#39;1.0&#39;,</span>
+  <span class="err">defaultSchema:</span> <span class="err">&#39;SALES&#39;,</span>
+  <span class="err">schemas:</span> <span class="err">[</span>
+    <span class="err">{</span>
+      <span class="err">name:</span> <span class="err">&#39;SALES&#39;,</span>
+      <span class="err">type:</span> <span class="err">&#39;custom&#39;,</span>
+      <span class="err">factory:</span> <span class="err">&#39;org.apache.calcite.adapter.csv.CsvSchemaFactory&#39;,</span>
+      <span class="err">operand:</span> <span class="err">{</span>
+        <span class="err">directory:</span> <span class="err">&#39;target/test-classes/sales&#39;</span>
+      <span class="p">}</span><span class="err">,</span>
+      <span class="err">tables:</span> <span class="p">[</span>
+        <span class="p">{</span>
+          <span class="err">name:</span> <span class="err">&#39;FEMALE_EMPS&#39;,</span>
+          <span class="err">type:</span> <span class="err">&#39;view&#39;,</span>
+          <span class="err">sql:</span> <span class="err">&#39;SELECT</span> <span class="err">*</span> <span class="err">FROM</span> <span class="err">emps</span> <span class="err">WHERE</span> <span class="err">gender</span> <span class="err">=</span> <span class="err">\&#39;F\&#39;&#39;</span>
+        <span class="p">}</span>
+      <span class="p">]</span>
+    <span class="err">}</span>
+  <span class="err">]</span>
+<span class="err">}</span></code></pre></div>
 
 <p>The line <code>type: 'view'</code> tags <code>FEMALE_EMPS</code> as a view,
 as opposed to a regular table or a custom table.
@@ -924,27 +908,23 @@ back-slash, in the normal way for JSON.<
 alternative syntax. If your view has a long SQL statement, you can instead
 supply a list of lines rather than a single string:</p>
 
-<p><code>json
-        {
-          name: 'FEMALE_EMPS',
-          type: 'view',
-          sql: [
-            'SELECT * FROM emps',
-            'WHERE gender = \'F\''
-          ]
-        }
-</code></p>
+<div class="highlight"><pre><code class="language-json" data-lang="json"><span class="p">{</span>
+  <span class="err">name:</span> <span class="err">&#39;FEMALE_EMPS&#39;,</span>
+  <span class="err">type:</span> <span class="err">&#39;view&#39;,</span>
+  <span class="err">sql:</span> <span class="err">[</span>
+    <span class="err">&#39;SELECT</span> <span class="err">*</span> <span class="err">FROM</span> <span class="err">emps&#39;,</span>
+    <span class="err">&#39;WHERE</span> <span class="err">gender</span> <span class="err">=</span> <span class="err">\&#39;F\&#39;&#39;</span>
+  <span class="err">]</span>
+<span class="p">}</span></code></pre></div>
 
 <p>Now we have defined a view, we can use it in queries just as if it were a table:</p>
 
-<p><code>sql
-sqlline&gt; SELECT e.name, d.name FROM female_emps AS e JOIN depts AS d on e.deptno = d.deptno;
-+--------+------------+
-|  NAME  |    NAME    |
-+--------+------------+
-| Wilma  | Marketing  |
-+--------+------------+
-</code></p>
+<div 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="n">depts</span> <span class="k">AS</span> <span class="n">d</span> <span class="k">on</span> <span class="n">e</span><span class="p">.</span><span class="n">deptno</span> <span class="o">=</span> <span class="n">d</span><span class="p">.</span><span class="n">deptno</span><span class="p">;</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="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></div>
 
 <h2 id="custom-tables">Custom tables</h2>
 
@@ -953,62 +933,56 @@ They don’t need to live in a custom
 
 <p>There is an example in <code>model-with-custom-table.json</code>:</p>
 
-<p><code>json
-{
-  version: '1.0',
-  defaultSchema: 'CUSTOM_TABLE',
-  schemas: [
-    {
-      name: 'CUSTOM_TABLE',
-      tables: [
-        {
-          name: 'EMPS',
-          type: 'custom',
-          factory: 'org.apache.calcite.adapter.csv.CsvTableFactory',
-          operand: {
-            file: 'target/test-classes/sales/EMPS.csv.gz',
-            flavor: "scannable"
-          }
-        }
-      ]
-    }
-  ]
-}
-</code></p>
+<div class="highlight"><pre><code class="language-json" data-lang="json"><span class="p">{</span>
+  <span class="err">version:</span> <span class="err">&#39;1.0&#39;,</span>
+  <span class="err">defaultSchema:</span> <span class="err">&#39;CUSTOM_TABLE&#39;,</span>
+  <span class="err">schemas:</span> <span class="err">[</span>
+    <span class="err">{</span>
+      <span class="err">name:</span> <span class="err">&#39;CUSTOM_TABLE&#39;,</span>
+      <span class="err">tables:</span> <span class="err">[</span>
+        <span class="err">{</span>
+          <span class="err">name:</span> <span class="err">&#39;EMPS&#39;,</span>
+          <span class="err">type:</span> <span class="err">&#39;custom&#39;,</span>
+          <span class="err">factory:</span> <span class="err">&#39;org.apache.calcite.adapter.csv.CsvTableFactory&#39;,</span>
+          <span class="err">operand:</span> <span class="err">{</span>
+            <span class="err">file:</span> <span class="err">&#39;target/test-classes/sales/EMPS.csv.gz&#39;,</span>
+            <span class="err">flavor:</span> <span class="nt">&quot;scannable&quot;</span>
+          <span class="p">}</span>
+        <span class="err">}</span>
+      <span class="err">]</span>
+    <span class="err">}</span>
+  <span class="err">]</span>
+<span class="err">}</span></code></pre></div>
 
 <p>We can query the table in the usual way:</p>
 
-<p><code>sql
-sqlline&gt; !connect jdbc:calcite:model=target/test-classes/model-with-custom-table.json admin admin
-sqlline&gt; SELECT empno, name FROM custom_table.emps;
-+--------+--------+
-| EMPNO  |  NAME  |
-+--------+--------+
-| 100    | Fred   |
-| 110    | Eric   |
-| 110    | John   |
-| 120    | Wilma  |
-| 130    | Alice  |
-+--------+--------+
-</code></p>
+<div 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><span class="n">model</span><span class="o">-</span><span class="k">with</span><span class="o">-</span><span class="n">custom</span><span class="o">-</span><span class="k">table</span><span class="p">.</span><span class="n">json</span> <span class="k">admin</span> <span class="k">admin</span>
+<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="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="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>
+<span class="o">|</span> <span class="mi">120</span>    <span class="o">|</span> <span class="n">Wilma</span>  <span class="o">|</span>
+<span class="o">|</span> <span class="mi">130</span>    <span class="o">|</span> <span class="n">Alice</span>  <span class="o">|</span>
+<span class="o">+</span><span class="c1">--------+--------+</span></code></pre></div>
 
 <p>The schema is a regular one, and contains a custom table powered by
-<a href="../example/csv/src/main/java/org/apache/calcite/adapter/csv/CsvTableFactory.java">org.apache.calcite.adapter.csv.CsvTableFactory</a>,
+<a href="http://github.com/apache/incubator-calcite/blob/master/example/csv/src/main/java/org/apache/calcite/adapter/csv/CsvTableFactory.java">org.apache.calcite.adapter.csv.CsvTableFactory</a>,
 which implements the Calcite interface
-<a href="http://www.hydromatic.net/calcite/apidocs/org/apache/calcite/schema/TableFactory.html">TableFactory</a>.
+<a href="/apidocs/org/apache/calcite/schema/TableFactory.html">TableFactory</a>.
 Its <code>create</code> method instantiates a <code>CsvScannableTable</code>,
 passing in the <code>file</code> argument from the model file:</p>
 
-<p><code>java
-public CsvTable create(SchemaPlus schema, String name,
-    Map&lt;String, Object&gt; map, RelDataType rowType) {
-  String fileName = (String) map.get("file");
-  final File file = new File(fileName);
-  final RelProtoDataType protoRowType =
-      rowType != null ? RelDataTypeImpl.proto(rowType) : null;
-  return new CsvScannableTable(file, protoRowType);
-}
-</code></p>
+<div class="highlight"><pre><code class="language-java" data-lang="java"><span class="kd">public</span> <span class="n">CsvTable</span> <span class="nf">create</span><span class="o">(</span><span class="n">SchemaPlus</span> <span class="n">schema</span><span class="o">,</span> <span class="n">String</span> <span class="n">name</span><span class="o">,</span>
+    <span class="n">Map</span><span class="o">&lt;</span><span class="n">String</span><span class="o">,</span> <span class="n">Object</span><span class="o">&gt;</span> <span class="n">map</span><span class="o">,</span> <span class="n">RelDataType</span> <span class="n">rowType</span><span class="o">)</span> <span class="o">{</span>
+  <span class="n">String</span> <span class="n">fileName</span> <span class="o">=</span> <span class="o">(</span><span class="n">String</span><span class="o">)</span> <span class="n">map</span><span class="o">.</span><span class="na">get</span><span class="o">(</span><span class="s">&quot;file&quot;</span><span class="o">);</span>
+  <span class="kd">final</span> <span class="n">File</span> <span class="n">file</span> <span class="o">=</span> <span class="k">new</span> <span class="nf">File</span><span class="o">(</span><span class="n">fileName</span><span class="o">);</span>
+  <span class="kd">final</span> <span class="n">RelProtoDataType</span> <span class="n">protoRowType</span> <span class="o">=</span>
+      <span class="n">rowType</span> <span class="o">!=</span> <span class="kc">null</span> <span class="o">?</span> <span class="n">RelDataTypeImpl</span><span class="o">.</span><span class="na">proto</span><span class="o">(</span><span class="n">rowType</span><span class="o">)</span> <span class="o">:</span> <span class="kc">null</span><span class="o">;</span>
+  <span class="k">return</span> <span class="k">new</span> <span class="nf">CsvScannableTable</span><span class="o">(</span><span class="n">file</span><span class="o">,</span> <span class="n">protoRowType</span><span class="o">);</span>
+<span class="o">}</span></code></pre></div>
 
 <p>Implementing a custom table is often a simpler alternative to implementing
 a custom schema. Both approaches might end up creating a similar implementation
@@ -1025,18 +999,16 @@ more control (say, providing different p
 
 <p>Models can include comments using <code>/* ... */</code> and <code>//</code> syntax:</p>
 
-<p><code>json
-{
-  version: '1.0',
-  /* Multi-line
-     comment. */
-  defaultSchema: 'CUSTOM_TABLE',
-  // Single-line comment.
-  schemas: [
-    ..
-  ]
-}
-</code></p>
+<div class="highlight"><pre><code class="language-json" data-lang="json"><span class="p">{</span>
+  <span class="err">version:</span> <span class="err">&#39;1.0&#39;,</span>
+  <span class="err">/*</span> <span class="err">Multi-line</span>
+     <span class="err">comment.</span> <span class="err">*/</span>
+  <span class="err">defaultSchema:</span> <span class="err">&#39;CUSTOM_TABLE&#39;,</span>
+  <span class="err">//</span> <span class="err">Single-line</span> <span class="err">comment.</span>
+  <span class="err">schemas:</span> <span class="err">[</span>
+    <span class="err">..</span>
+  <span class="err">]</span>
+<span class="p">}</span></code></pre></div>
 
 <p>(Comments are not standard JSON, but are a harmless extension.)</p>
 
@@ -1061,98 +1033,92 @@ schema, and then you define some rules t
 a subset of columns from a CSV file. Let’s run the same query against two very
 similar schemas:</p>
 
-<p><code>sql
-sqlline&gt; !connect jdbc:calcite:model=target/test-classes/model.json admin admin
-sqlline&gt; explain plan for select name from emps;
-+-----------------------------------------------------+
-| PLAN                                                |
-+-----------------------------------------------------+
-| EnumerableCalcRel(expr#0..9=[{inputs}], NAME=[$t1]) |
-|   EnumerableTableAccessRel(table=[[SALES, EMPS]])   |
-+-----------------------------------------------------+
-sqlline&gt; !connect jdbc:calcite:model=target/test-classes/smart.json admin admin
-sqlline&gt; explain plan for select name from emps;
-+-----------------------------------------------------+
-| PLAN                                                |
-+-----------------------------------------------------+
-| EnumerableCalcRel(expr#0..9=[{inputs}], NAME=[$t1]) |
-|   CsvTableScan(table=[[SALES, EMPS]])               |
-+-----------------------------------------------------+
-</code></p>
+<div 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><span class="n">model</span><span class="p">.</span><span class="n">json</span> <span class="k">admin</span> <span class="k">admin</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> <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="n">PLAN</span>                                                <span class="o">|</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</span><span class="p">])</span> <span class="o">|</span>
+<span class="o">|</span>   <span class="n">EnumerableTableAccessRel</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">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="n">json</span> <span class="k">admin</span> <span class="k">admin</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> <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="n">PLAN</span>                                                <span class="o">|</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</span><span class="p">])</span> <span class="o">|</span>
+<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></div>
 
 <p>What causes the difference in plan? Let’s follow the trail of evidence. In the
 <code>smart.json</code> model file, there is just one extra line:</p>
 
-<p><code>json
-flavor: "translatable"
-</code></p>
+<div class="highlight"><pre><code class="language-json" data-lang="json"><span class="err">flavor:</span> <span class="s2">&quot;translatable&quot;</span></code></pre></div>
 
 <p>This causes a <code>CsvSchema</code> to be created with
 <code>flavor = TRANSLATABLE</code>,
 and its <code>createTable</code> method creates instances of
-<a href="../example/csv/src/main/java/org/apache/calcite/adapter/csv/CsvTranslatableTable.java">CsvTranslatableTable</a>
+<a href="http://github.com/apache/incubator-calcite/blob/master/example/csv/src/main/java/org/apache/calcite/adapter/csv/CsvTranslatableTable.java">CsvTranslatableTable</a>
 rather than a <code>CsvScannableTable</code>.</p>
 
 <p><code>CsvTranslatableTable</code> implements the
-<code><a href="http://www.hydromatic.net/calcite/apidocs/org/apache/calcite/schema/TranslatableTable.html#toRel()">TranslatableTable.toRel()</a></code>
+<code><a href="/apidocs/org/apache/calcite/schema/TranslatableTable.html#toRel()">TranslatableTable.toRel()</a></code>
 method to create
-<a href="../example/csv/src/main/java/org/apache/calcite/adapter/csv/CsvTableScan.java">CsvTableScan</a>.
+<a href="http://github.com/apache/incubator-calcite/blob/master/example/csv/src/main/java/org/apache/calcite/adapter/csv/CsvTableScan.java">CsvTableScan</a>.
 Table scans are the leaves of a query operator tree.
 The usual implementation is
-<code><a href="http://www.hydromatic.net/calcite/apidocs/org/apache/calcite/adapter/enumerable/EnumerableTableScan.html">EnumerableTableScan</a></code>,
+<code><a href="/apidocs/org/apache/calcite/adapter/enumerable/EnumerableTableScan.html">EnumerableTableScan</a></code>,
 but we have created a distinctive sub-type that will cause rules to fire.</p>
 
 <p>Here is the rule in its entirety:</p>
 
-<p>```java
-public class CsvProjectTableScanRule extends RelOptRule {
-  public static final CsvProjectTableScanRule INSTANCE =
-      new CsvProjectTableScanRule();</p>
-
-<p>private CsvProjectTableScanRule() {
-    super(
-        operand(Project.class,
-            operand(CsvTableScan.class, none())),
-        “CsvProjectTableScanRule”);
-  }</p>
-
-<p>@Override
-  public void onMatch(RelOptRuleCall call) {
-    final Project project = call.rel(0);
-    final CsvTableScan scan = call.rel(1);
-    int[] fields = getProjectFields(project.getProjects());
-    if (fields == null) {
-      // Project contains expressions more complex than just field references.
-      return;
-    }
-    call.transformTo(
-        new CsvTableScan(
-            scan.getCluster(),
-            scan.getTable(),
-            scan.csvTable,
-            fields));
-  }</p>
-
-<p>private int[] getProjectFields(List<rexnode> exps) {
-    final int[] fields = new int[exps.size()];
-    for (int i = 0; i &lt; exps.size(); i++) {
-      final RexNode exp = exps.get(i);
-      if (exp instanceof RexInputRef) {
-        fields[i] = ((RexInputRef) exp).getIndex();
-      } else {
-        return null; // not a simple projection
-      }
-    }
-    return fields;
-  }
-}
-```</rexnode></p>
+<div class="highlight"><pre><code class="language-java" data-lang="java"><span class="kd">public</span> <span class="kd">class</span> <span class="nc">CsvProjectTableScanRule</span> <span class="kd">extends</span> <span class="n">RelOptRule</span> <span class="o">{</span>
+  <span class="kd">public</span> <span class="kd">static</span> <span class="kd">final</span> <span class="n">CsvProjectTableScanRule</span> <span class="n">INSTANCE</span> <span class="o">=</span>
+      <span class="k">new</span> <span class="nf">CsvProjectTableScanRule</span><span class="o">();</span>
+
+  <span class="kd">private</span> <span class="nf">CsvProjectTableScanRule</span><span class="o">()</span> <span class="o">{</span>
+    <span class="kd">super</span><span class="o">(</span>
+        <span class="n">operand</span><span class="o">(</span><span class="n">Project</span><span class="o">.</span><span class="na">class</span><span class="o">,</span>
+            <span class="n">operand</span><span class="o">(</span><span class="n">CsvTableScan</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="n">none</span><span class="o">())),</span>
+        <span class="s">&quot;CsvProjectTableScanRule&quot;</span><span class="o">);</span>
+  <span class="o">}</span>
+
+  <span class="nd">@Override</span>
+  <span class="kd">public</span> <span class="kt">void</span> <span class="nf">onMatch</span><span class="o">(</span><span class="n">RelOptRuleCall</span> <span class="n">call</span><span class="o">)</span> <span class="o">{</span>
+    <span class="kd">final</span> <span class="n">Project</span> <span class="n">project</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">0</span><span class="o">);</span>
+    <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="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>
+        <span class="k">new</span> <span class="nf">CsvTableScan</span><span class="o">(</span>
+            <span class="n">scan</span><span class="o">.</span><span class="na">getCluster</span><span class="o">(),</span>
+            <span class="n">scan</span><span class="o">.</span><span class="na">getTable</span><span class="o">(),</span>
+            <span class="n">scan</span><span class="o">.</span><span class="na">csvTable</span><span class="o">,</span>
+            <span class="n">fields</span><span class="o">));</span>
+  <span class="o">}</span>
+
+  <span class="kd">private</span> <span class="kt">int</span><span class="o">[]</span> <span class="nf">getProjectFields</span><span class="o">(</span><span class="n">List</span><span class="o">&lt;</span><span class="n">RexNode</span><span class="o">&gt;</span> <span class="n">exps</span><span class="o">)</span> <span class="o">{</span>
+    <span class="kd">final</span> <span class="kt">int</span><span class="o">[]</span> <span class="n">fields</span> <span class="o">=</span> <span class="k">new</span> <span class="kt">int</span><span class="o">[</span><span class="n">exps</span><span class="o">.</span><span class="na">size</span><span class="o">()];</span>
+    <span class="k">for</span> <span class="o">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="o">;</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="n">exps</span><span class="o">.</span><span class="na">size</span><span class="o">();</span> <span class="n">i</span><span class="o">++)</span> <span class="o">{</span>
+      <span class="kd">final</span> <span class="n">RexNode</span> <span class="n">exp</span> <span class="o">=</span> <span class="n">exps</span><span class="o">.</span><span class="na">get</span><span class="o">(</span><span class="n">i</span><span class="o">);</span>
+      <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="o">}</span>
+    <span class="o">}</span>
+    <span class="k">return</span> <span class="n">fields</span><span class="o">;</span>
+  <span class="o">}</span>
+<span class="o">}</span></code></pre></div>
 
 <p>The constructor declares the pattern of relational expressions that will cause
 the rule to fire.</p>
 
 <p>The <code>onMatch</code> method generates a new relational expression and calls
-<code><a href="http://www.hydromatic.net/calcite/apidocs/org/apache/calcite/plan/RelOptRuleCall.html#transformTo(org.apache.calcite.rel.RelNode)">RelOptRuleCall.transformTo()</a></code>
+<code><a href="/apidocs/org/apache/calcite/plan/RelOptRuleCall.html#transformTo(org.apache.calcite.rel.RelNode)">RelOptRuleCall.transformTo()</a></code>
 to indicate that the rule has fired successfully.</p>
 
 <h2 id="the-query-optimization-process">The query optimization process</h2>
@@ -1196,25 +1162,23 @@ operator statistics it is based upon. Bu
 
 <p>For example, this schema reads from a MySQL “foodmart” database:</p>
 
-<p><code>json
-{
-  version: '1.0',
-  defaultSchema: 'FOODMART',
-  schemas: [
-    {
-      name: 'FOODMART',
-      type: 'custom',
-      factory: 'org.apache.calcite.adapter.jdbc.JdbcSchema$Factory',
-      operand: {
-        jdbcDriver: 'com.mysql.jdbc.Driver',
-        jdbcUrl: 'jdbc:mysql://localhost/foodmart',
-        jdbcUser: 'foodmart',
-        jdbcPassword: 'foodmart'
-      }
-    }
-  ]
-}
-</code></p>
+<div class="highlight"><pre><code class="language-json" data-lang="json"><span class="p">{</span>
+  <span class="err">version:</span> <span class="err">&#39;1.0&#39;,</span>
+  <span class="err">defaultSchema:</span> <span class="err">&#39;FOODMART&#39;,</span>
+  <span class="err">schemas:</span> <span class="err">[</span>
+    <span class="err">{</span>
+      <span class="err">name:</span> <span class="err">&#39;FOODMART&#39;,</span>
+      <span class="err">type:</span> <span class="err">&#39;custom&#39;,</span>
+      <span class="err">factory:</span> <span class="err">&#39;org.apache.calcite.adapter.jdbc.JdbcSchema$Factory&#39;,</span>
+      <span class="err">operand:</span> <span class="err">{</span>
+        <span class="err">jdbcDriver:</span> <span class="err">&#39;com.mysql.jdbc.Driver&#39;,</span>
+        <span class="err">jdbcUrl:</span> <span class="err">&#39;jdbc:mysql://localhost/foodmart&#39;,</span>
+        <span class="err">jdbcUser:</span> <span class="err">&#39;foodmart&#39;,</span>
+        <span class="err">jdbcPassword:</span> <span class="err">&#39;foodmart&#39;</span>
+      <span class="p">}</span>
+    <span class="err">}</span>
+  <span class="err">]</span>
+<span class="err">}</span></code></pre></div>
 
 <p>(The FoodMart database will be familiar to those of you who have used
 the Mondrian OLAP engine, because it is Mondrian’s main test data
@@ -1241,57 +1205,53 @@ those in-memory tables, effectively a ca
 <p>For example, the following model reads tables from a MySQL
 “foodmart” database:</p>
 
-<p><code>json
-{
-  version: '1.0',
-  defaultSchema: 'FOODMART_CLONE',
-  schemas: [
-    {
-      name: 'FOODMART_CLONE',
-      type: 'custom',
-      factory: 'org.apache.calcite.adapter.clone.CloneSchema$Factory',
-      operand: {
-        jdbcDriver: 'com.mysql.jdbc.Driver',
-        jdbcUrl: 'jdbc:mysql://localhost/foodmart',
-        jdbcUser: 'foodmart',
-        jdbcPassword: 'foodmart'
-      }
-    }
-  ]
-}
-</code></p>
+<div class="highlight"><pre><code class="language-json" data-lang="json"><span class="p">{</span>
+  <span class="err">version:</span> <span class="err">&#39;1.0&#39;,</span>
+  <span class="err">defaultSchema:</span> <span class="err">&#39;FOODMART_CLONE&#39;,</span>
+  <span class="err">schemas:</span> <span class="err">[</span>
+    <span class="err">{</span>
+      <span class="err">name:</span> <span class="err">&#39;FOODMART_CLONE&#39;,</span>
+      <span class="err">type:</span> <span class="err">&#39;custom&#39;,</span>
+      <span class="err">factory:</span> <span class="err">&#39;org.apache.calcite.adapter.clone.CloneSchema$Factory&#39;,</span>
+      <span class="err">operand:</span> <span class="err">{</span>
+        <span class="err">jdbcDriver:</span> <span class="err">&#39;com.mysql.jdbc.Driver&#39;,</span>
+        <span class="err">jdbcUrl:</span> <span class="err">&#39;jdbc:mysql://localhost/foodmart&#39;,</span>
+        <span class="err">jdbcUser:</span> <span class="err">&#39;foodmart&#39;,</span>
+        <span class="err">jdbcPassword:</span> <span class="err">&#39;foodmart&#39;</span>
+      <span class="p">}</span>
+    <span class="err">}</span>
+  <span class="err">]</span>
+<span class="err">}</span></code></pre></div>
 
 <p>Another technique is to build a clone schema on top of an existing
 schema. You use the <code>source</code> property to reference a schema
 defined earlier in the model, like this:</p>
 
-<p><code>json
-{
-  version: '1.0',
-  defaultSchema: 'FOODMART_CLONE',
-  schemas: [
-    {
-      name: 'FOODMART',
-      type: 'custom',
-      factory: 'org.apache.calcite.adapter.jdbc.JdbcSchema$Factory',
-      operand: {
-        jdbcDriver: 'com.mysql.jdbc.Driver',
-        jdbcUrl: 'jdbc:mysql://localhost/foodmart',
-        jdbcUser: 'foodmart',
-        jdbcPassword: 'foodmart'
-      }
-    },
-    {
-      name: 'FOODMART_CLONE',
-      type: 'custom',
-      factory: 'org.apache.calcite.adapter.clone.CloneSchema$Factory',
-      operand: {
-        source: 'FOODMART'
-      }
-    }
-  ]
-}
-</code></p>
+<div class="highlight"><pre><code class="language-json" data-lang="json"><span class="p">{</span>
+  <span class="err">version:</span> <span class="err">&#39;1.0&#39;,</span>
+  <span class="err">defaultSchema:</span> <span class="err">&#39;FOODMART_CLONE&#39;,</span>
+  <span class="err">schemas:</span> <span class="err">[</span>
+    <span class="err">{</span>
+      <span class="err">name:</span> <span class="err">&#39;FOODMART&#39;,</span>
+      <span class="err">type:</span> <span class="err">&#39;custom&#39;,</span>
+      <span class="err">factory:</span> <span class="err">&#39;org.apache.calcite.adapter.jdbc.JdbcSchema$Factory&#39;,</span>
+      <span class="err">operand:</span> <span class="err">{</span>
+        <span class="err">jdbcDriver:</span> <span class="err">&#39;com.mysql.jdbc.Driver&#39;,</span>
+        <span class="err">jdbcUrl:</span> <span class="err">&#39;jdbc:mysql://localhost/foodmart&#39;,</span>
+        <span class="err">jdbcUser:</span> <span class="err">&#39;foodmart&#39;,</span>
+        <span class="err">jdbcPassword:</span> <span class="err">&#39;foodmart&#39;</span>
+      <span class="p">}</span>
+    <span class="err">},</span>
+    <span class="p">{</span>
+      <span class="err">name:</span> <span class="err">&#39;FOODMART_CLONE&#39;,</span>
+      <span class="err">type:</span> <span class="err">&#39;custom&#39;,</span>
+      <span class="err">factory:</span> <span class="err">&#39;org.apache.calcite.adapter.clone.CloneSchema$Factory&#39;,</span>
+      <span class="err">operand:</span> <span class="err">{</span>
+        <span class="err">source:</span> <span class="err">&#39;FOODMART&#39;</span>
+      <span class="p">}</span>
+    <span class="err">}</span>
+  <span class="err">]</span>
+<span class="err">}</span></code></pre></div>
 
 <p>You can use this approach to create a clone schema on any type of
 schema, not just JDBC.</p>
@@ -1345,13 +1305,6 @@ relational operators?</p>
 
 <p>(To be written.)</p>
 
-<h2 id="further-resources">Further resources</h2>
-
-<ul>
-  <li><a href="http://calcite.incubator.apache.org">Apache Calcite</a> home
-page</li>
-</ul>
-
           
 
 

Modified: incubator/calcite/site/news/2015/01/31/release-1.0.0-incubating/index.html
URL: http://svn.apache.org/viewvc/incubator/calcite/site/news/2015/01/31/release-1.0.0-incubating/index.html?rev=1682538&r1=1682537&r2=1682538&view=diff
==============================================================================
--- incubator/calcite/site/news/2015/01/31/release-1.0.0-incubating/index.html (original)
+++ incubator/calcite/site/news/2015/01/31/release-1.0.0-incubating/index.html Fri May 29 19:47:55 2015
@@ -95,6 +95,14 @@
       
       <option value="/news/2015/01/31/release-1.0.0-incubating/">Release 1.0.0 Incubating</option>
       
+      <option value="/news/2014/11/05/release-0.9.2-incubating/">Release 0.9.2 Incubating</option>
+      
+      <option value="/news/2014/10/02/release-0.9.1-incubating/">Release 0.9.1 Incubating</option>
+      
+      <option value="/news/2014/08/19/release-0.9.0-incubating/">Release 0.9.0 Incubating</option>
+      
+      <option value="/news/2014/06/27/release-0.8.0-incubating/">Release 0.8.0 Incubating</option>
+      
     </optgroup>
   </select>
 </div>
@@ -176,8 +184,9 @@ improvements to the algorithms that impl
 including an interpreter that can evaluate queries without compilation;
 and fixes about 30 bugs.</p>
 
-<p>See the <a href="/docs/history.html#v1-0-0">release notes</a>.</p>
-
+    
+    <p>See the <a href="/docs/history.html#v1-0-0">release notes</a>.</p>
+    
   </div>
 </article>
 
@@ -212,6 +221,10 @@ and fixes about 30 bugs.</p>
         <a href="/news/2015/01/31/release-1.0.0-incubating/">1.0.0-incubating</a>
       </li>
       
+      <li class="">
+        <a href="/news/2014/11/05/release-0.9.2-incubating/">0.9.2-incubating</a>
+      </li>
+      
     </ul>
     <h4>Other News</h4>
     <ul>
@@ -225,6 +238,14 @@ and fixes about 30 bugs.</p>
         
         
         
+        
+        
+        
+        
+        
+        
+        
+        
         
         
         

Modified: incubator/calcite/site/news/2015/03/13/release-1.1.0-incubating/index.html
URL: http://svn.apache.org/viewvc/incubator/calcite/site/news/2015/03/13/release-1.1.0-incubating/index.html?rev=1682538&r1=1682537&r2=1682538&view=diff
==============================================================================
--- incubator/calcite/site/news/2015/03/13/release-1.1.0-incubating/index.html (original)
+++ incubator/calcite/site/news/2015/03/13/release-1.1.0-incubating/index.html Fri May 29 19:47:55 2015
@@ -95,6 +95,14 @@
       
       <option value="/news/2015/01/31/release-1.0.0-incubating/">Release 1.0.0 Incubating</option>
       
+      <option value="/news/2014/11/05/release-0.9.2-incubating/">Release 0.9.2 Incubating</option>
+      
+      <option value="/news/2014/10/02/release-0.9.1-incubating/">Release 0.9.1 Incubating</option>
+      
+      <option value="/news/2014/08/19/release-0.9.0-incubating/">Release 0.9.0 Incubating</option>
+      
+      <option value="/news/2014/06/27/release-0.8.0-incubating/">Release 0.8.0 Incubating</option>
+      
     </optgroup>
   </select>
 </div>
@@ -175,8 +183,9 @@ later.</p>
 <code>RelNode</code>. We strongly suggest that you use these rather than
 calling constructors directly.</p>
 
-<p>See the <a href="/docs/history.html#v1-1-0">release notes</a>.</p>
-
+    
+    <p>See the <a href="/docs/history.html#v1-1-0">release notes</a>.</p>
+    
   </div>
 </article>
 
@@ -211,6 +220,10 @@ calling constructors directly.</p>
         <a href="/news/2015/01/31/release-1.0.0-incubating/">1.0.0-incubating</a>
       </li>
       
+      <li class="">
+        <a href="/news/2014/11/05/release-0.9.2-incubating/">0.9.2-incubating</a>
+      </li>
+      
     </ul>
     <h4>Other News</h4>
     <ul>
@@ -224,6 +237,14 @@ calling constructors directly.</p>
         
         
         
+        
+        
+        
+        
+        
+        
+        
+        
         
         
         

Modified: incubator/calcite/site/news/2015/04/07/release-1.2.0-incubating/index.html
URL: http://svn.apache.org/viewvc/incubator/calcite/site/news/2015/04/07/release-1.2.0-incubating/index.html?rev=1682538&r1=1682537&r2=1682538&view=diff
==============================================================================
--- incubator/calcite/site/news/2015/04/07/release-1.2.0-incubating/index.html (original)
+++ incubator/calcite/site/news/2015/04/07/release-1.2.0-incubating/index.html Fri May 29 19:47:55 2015
@@ -95,6 +95,14 @@
       
       <option value="/news/2015/01/31/release-1.0.0-incubating/">Release 1.0.0 Incubating</option>
       
+      <option value="/news/2014/11/05/release-0.9.2-incubating/">Release 0.9.2 Incubating</option>
+      
+      <option value="/news/2014/10/02/release-0.9.1-incubating/">Release 0.9.1 Incubating</option>
+      
+      <option value="/news/2014/08/19/release-0.9.0-incubating/">Release 0.9.0 Incubating</option>
+      
+      <option value="/news/2014/06/27/release-0.8.0-incubating/">Release 0.8.0 Incubating</option>
+      
     </optgroup>
   </select>
 </div>
@@ -175,8 +183,9 @@ distribution among relational expression
 and [<a href="https://issues.apache.org/jira/browse/CALCITE-307">CALCITE-307</a>]
 improve implicit and explicit conversions in SQL.</p>
 
-<p>See the <a href="/docs/history.html#v1-2-0">release notes</a>.</p>
-
+    
+    <p>See the <a href="/docs/history.html#v1-2-0">release notes</a>.</p>
+    
   </div>
 </article>
 
@@ -211,6 +220,10 @@ improve implicit and explicit conversion
         <a href="/news/2015/01/31/release-1.0.0-incubating/">1.0.0-incubating</a>
       </li>
       
+      <li class="">
+        <a href="/news/2014/11/05/release-0.9.2-incubating/">0.9.2-incubating</a>
+      </li>
+      
     </ul>
     <h4>Other News</h4>
     <ul>
@@ -224,6 +237,14 @@ improve implicit and explicit conversion
         
         
         
+        
+        
+        
+        
+        
+        
+        
+        
         
         
         

Modified: incubator/calcite/site/news/2015/04/24/new-committers/index.html
URL: http://svn.apache.org/viewvc/incubator/calcite/site/news/2015/04/24/new-committers/index.html?rev=1682538&r1=1682537&r2=1682538&view=diff
==============================================================================
--- incubator/calcite/site/news/2015/04/24/new-committers/index.html (original)
+++ incubator/calcite/site/news/2015/04/24/new-committers/index.html Fri May 29 19:47:55 2015
@@ -95,6 +95,14 @@
       
       <option value="/news/2015/01/31/release-1.0.0-incubating/">Release 1.0.0 Incubating</option>
       
+      <option value="/news/2014/11/05/release-0.9.2-incubating/">Release 0.9.2 Incubating</option>
+      
+      <option value="/news/2014/10/02/release-0.9.1-incubating/">Release 0.9.1 Incubating</option>
+      
+      <option value="/news/2014/08/19/release-0.9.0-incubating/">Release 0.9.0 Incubating</option>
+      
+      <option value="/news/2014/06/27/release-0.8.0-incubating/">Release 0.8.0 Incubating</option>
+      
     </optgroup>
   </select>
 </div>
@@ -172,6 +180,7 @@ committers for their work on Calcite. We
   <li>Nick Dimiduk</li>
 </ul>
 
+    
   </div>
 </article>
 
@@ -206,6 +215,10 @@ committers for their work on Calcite. We
         <a href="/news/2015/01/31/release-1.0.0-incubating/">1.0.0-incubating</a>
       </li>
       
+      <li class="">
+        <a href="/news/2014/11/05/release-0.9.2-incubating/">0.9.2-incubating</a>
+      </li>
+      
     </ul>
     <h4>Other News</h4>
     <ul>
@@ -219,6 +232,14 @@ committers for their work on Calcite. We
         
         
         
+        
+        
+        
+        
+        
+        
+        
+        
         
         
         

Modified: incubator/calcite/site/news/2015/05/29/release-1.3.0-incubating/index.html
URL: http://svn.apache.org/viewvc/incubator/calcite/site/news/2015/05/29/release-1.3.0-incubating/index.html?rev=1682538&r1=1682537&r2=1682538&view=diff
==============================================================================
--- incubator/calcite/site/news/2015/05/29/release-1.3.0-incubating/index.html (original)
+++ incubator/calcite/site/news/2015/05/29/release-1.3.0-incubating/index.html Fri May 29 19:47:55 2015
@@ -95,6 +95,14 @@
       
       <option value="/news/2015/01/31/release-1.0.0-incubating/">Release 1.0.0 Incubating</option>
       
+      <option value="/news/2014/11/05/release-0.9.2-incubating/">Release 0.9.2 Incubating</option>
+      
+      <option value="/news/2014/10/02/release-0.9.1-incubating/">Release 0.9.1 Incubating</option>
+      
+      <option value="/news/2014/08/19/release-0.9.0-incubating/">Release 0.9.0 Incubating</option>
+      
+      <option value="/news/2014/06/27/release-0.8.0-incubating/">Release 0.8.0 Incubating</option>
+      
     </optgroup>
   </select>
 </div>
@@ -167,8 +175,9 @@ and
 <a href="https://issues.apache.org/jira/browse/CALCITE-704">filtered aggregate functions</a>
 and various improvements to Avatica.</p>
 
-<p>See the <a href="/docs/history.html#v1-3-0">release notes</a>.</p>
-
+    
+    <p>See the <a href="/docs/history.html#v1-3-0">release notes</a>.</p>
+    
   </div>
 </article>
 
@@ -203,6 +212,10 @@ and various improvements to Avatica.</p>
         <a href="/news/2015/01/31/release-1.0.0-incubating/">1.0.0-incubating</a>
       </li>
       
+      <li class="">
+        <a href="/news/2014/11/05/release-0.9.2-incubating/">0.9.2-incubating</a>
+      </li>
+      
     </ul>
     <h4>Other News</h4>
     <ul>
@@ -216,6 +229,14 @@ and various improvements to Avatica.</p>
         
         
         
+        
+        
+        
+        
+        
+        
+        
+        
         
         
         

Modified: incubator/calcite/site/news/index.html
URL: http://svn.apache.org/viewvc/incubator/calcite/site/news/index.html?rev=1682538&r1=1682537&r2=1682538&view=diff
==============================================================================
--- incubator/calcite/site/news/index.html (original)
+++ incubator/calcite/site/news/index.html Fri May 29 19:47:55 2015
@@ -95,6 +95,14 @@
       
       <option value="/news/2015/01/31/release-1.0.0-incubating/">Release 1.0.0 Incubating</option>
       
+      <option value="/news/2014/11/05/release-0.9.2-incubating/">Release 0.9.2 Incubating</option>
+      
+      <option value="/news/2014/10/02/release-0.9.1-incubating/">Release 0.9.1 Incubating</option>
+      
+      <option value="/news/2014/08/19/release-0.9.0-incubating/">Release 0.9.0 Incubating</option>
+      
+      <option value="/news/2014/06/27/release-0.8.0-incubating/">Release 0.8.0 Incubating</option>
+      
     </optgroup>
   </select>
 </div>
@@ -169,8 +177,9 @@ and
 <a href="https://issues.apache.org/jira/browse/CALCITE-704">filtered aggregate functions</a>
 and various improvements to Avatica.</p>
 
-<p>See the <a href="/docs/history.html#v1-3-0">release notes</a>.</p>
-
+    
+    <p>See the <a href="/docs/history.html#v1-3-0">release notes</a>.</p>
+    
   </div>
 </article>
 
@@ -247,6 +256,7 @@ committers for their work on Calcite. We
   <li>Nick Dimiduk</li>
 </ul>
 
+    
   </div>
 </article>
 
@@ -326,8 +336,9 @@ distribution among relational expression
 and [<a href="https://issues.apache.org/jira/browse/CALCITE-307">CALCITE-307</a>]
 improve implicit and explicit conversions in SQL.</p>
 
-<p>See the <a href="/docs/history.html#v1-2-0">release notes</a>.</p>
-
+    
+    <p>See the <a href="/docs/history.html#v1-2-0">release notes</a>.</p>
+    
   </div>
 </article>
 
@@ -407,8 +418,9 @@ later.</p>
 <code>RelNode</code>. We strongly suggest that you use these rather than
 calling constructors directly.</p>
 
-<p>See the <a href="/docs/history.html#v1-1-0">release notes</a>.</p>
-
+    
+    <p>See the <a href="/docs/history.html#v1-1-0">release notes</a>.</p>
+    
   </div>
 </article>
 
@@ -489,8 +501,292 @@ improvements to the algorithms that impl
 including an interpreter that can evaluate queries without compilation;
 and fixes about 30 bugs.</p>
 
-<p>See the <a href="/docs/history.html#v1-0-0">release notes</a>.</p>
+    
+    <p>See the <a href="/docs/history.html#v1-0-0">release notes</a>.</p>
+    
+  </div>
+</article>
+
+
+  <article>
+  <h2>
+    <a href="/news/2014/11/05/release-0.9.2-incubating/">
+      Release 0.9.2 Incubating
+    </a>
+  </h2>
+  <span class="post-category">
+    <span class="label">
+      release
+    </span>
+  </span>
+  <div class="post-meta">
+    <span class="post-date">
+      05 Nov 2014
+    </span>
+    
+    
+    
+      
+    
+      
+    
+      
+    
+      
+    
+      
+    
+      
+    
+      
+    
+      
+    
+      
+    
+      
+        
+          
+        
+        
+          
+        
+      
+    
+      
+    
+      
+    
+      
+    
+      
+    
+    <a href="http://people.apache.org/~jhyde" class="post-author">
+      <img src="http://github.com/julianhyde.png"
+           class="avatar" alt="jhyde avatar"
+           width="24" height="24">
+      jhyde
+    </a>
+  </div>
+  <div class="post-content">
+    <p>A fairly minor release, and last release before we rename all of the
+packages and lots of classes, in what we expect to call 1.0. If you
+have an existing application, it’s worth upgrading to this first,
+before you move on to 1.0.</p>
+
+    
+    <p>See the <a href="/docs/history.html#v0-9-2">release notes</a>.</p>
+    
+  </div>
+</article>
+
+
+  <article>
+  <h2>
+    <a href="/news/2014/10/02/release-0.9.1-incubating/">
+      Release 0.9.1 Incubating
+    </a>
+  </h2>
+  <span class="post-category">
+    <span class="label">
+      release
+    </span>
+  </span>
+  <div class="post-meta">
+    <span class="post-date">
+      02 Oct 2014
+    </span>
+    
+    
+    
+      
+    
+      
+    
+      
+    
+      
+    
+      
+    
+      
+    
+      
+    
+      
+    
+      
+    
+      
+        
+          
+        
+        
+          
+        
+      
+    
+      
+    
+      
+    
+      
+    
+      
+    
+    <a href="http://people.apache.org/~jhyde" class="post-author">
+      <img src="http://github.com/julianhyde.png"
+           class="avatar" alt="jhyde avatar"
+           width="24" height="24">
+      jhyde
+    </a>
+  </div>
+  <div class="post-content">
+    <p>This is the first release as Calcite. (The project was previously called Optiq.)</p>
+
+    
+    <p>See the <a href="/docs/history.html#v0-9-1">release notes</a>.</p>
+    
+  </div>
+</article>
+
+
+  <article>
+  <h2>
+    <a href="/news/2014/08/19/release-0.9.0-incubating/">
+      Release 0.9.0 Incubating
+    </a>
+  </h2>
+  <span class="post-category">
+    <span class="label">
+      release
+    </span>
+  </span>
+  <div class="post-meta">
+    <span class="post-date">
+      19 Aug 2014
+    </span>
+    
+    
+    
+      
+    
+      
+    
+      
+    
+      
+    
+      
+    
+      
+    
+      
+    
+      
+    
+      
+    
+      
+        
+          
+        
+        
+          
+        
+      
+    
+      
+    
+      
+    
+      
+    
+      
+    
+    <a href="http://people.apache.org/~jhyde" class="post-author">
+      <img src="http://github.com/julianhyde.png"
+           class="avatar" alt="jhyde avatar"
+           width="24" height="24">
+      jhyde
+    </a>
+  </div>
+  <div class="post-content">
+    <p>This is the first release under the Apache incubator process.</p>
 
+    
+    <p>See the <a href="/docs/history.html#v0-9-0">release notes</a>.</p>
+    
+  </div>
+</article>
+
+
+  <article>
+  <h2>
+    <a href="/news/2014/06/27/release-0.8.0-incubating/">
+      Release 0.8.0 Incubating
+    </a>
+  </h2>
+  <span class="post-category">
+    <span class="label">
+      release
+    </span>
+  </span>
+  <div class="post-meta">
+    <span class="post-date">
+      27 Jun 2014
+    </span>
+    
+    
+    
+      
+    
+      
+    
+      
+    
+      
+    
+      
+    
+      
+    
+      
+    
+      
+    
+      
+    
+      
+        
+          
+        
+        
+          
+        
+      
+    
+      
+    
+      
+    
+      
+    
+      
+    
+    <a href="http://people.apache.org/~jhyde" class="post-author">
+      <img src="http://github.com/julianhyde.png"
+           class="avatar" alt="jhyde avatar"
+           width="24" height="24">
+      jhyde
+    </a>
+  </div>
+  <div class="post-content">
+    <p>This is the first release under the Apache incubator process.</p>
+
+    
+    <p>See the <a href="/docs/history.html#v0-8">release notes</a>.</p>
+    
   </div>
 </article>
 
@@ -536,6 +832,10 @@ of the website.</p>
         <a href="/news/2015/01/31/release-1.0.0-incubating/">1.0.0-incubating</a>
       </li>
       
+      <li class="">
+        <a href="/news/2014/11/05/release-0.9.2-incubating/">0.9.2-incubating</a>
+      </li>
+      
     </ul>
     <h4>Other News</h4>
     <ul>
@@ -549,6 +849,14 @@ of the website.</p>
         
         
         
+        
+        
+        
+        
+        
+        
+        
+        
         
         
         

Modified: incubator/calcite/site/news/releases/index.html
URL: http://svn.apache.org/viewvc/incubator/calcite/site/news/releases/index.html?rev=1682538&r1=1682537&r2=1682538&view=diff
==============================================================================
--- incubator/calcite/site/news/releases/index.html (original)
+++ incubator/calcite/site/news/releases/index.html Fri May 29 19:47:55 2015
@@ -95,6 +95,14 @@
       
       <option value="/news/2015/01/31/release-1.0.0-incubating/">Release 1.0.0 Incubating</option>
       
+      <option value="/news/2014/11/05/release-0.9.2-incubating/">Release 0.9.2 Incubating</option>
+      
+      <option value="/news/2014/10/02/release-0.9.1-incubating/">Release 0.9.1 Incubating</option>
+      
+      <option value="/news/2014/08/19/release-0.9.0-incubating/">Release 0.9.0 Incubating</option>
+      
+      <option value="/news/2014/06/27/release-0.8.0-incubating/">Release 0.8.0 Incubating</option>
+      
     </optgroup>
   </select>
 </div>
@@ -169,8 +177,9 @@ and
 <a href="https://issues.apache.org/jira/browse/CALCITE-704">filtered aggregate functions</a>
 and various improvements to Avatica.</p>
 
-<p>See the <a href="/docs/history.html#v1-3-0">release notes</a>.</p>
-
+    
+    <p>See the <a href="/docs/history.html#v1-3-0">release notes</a>.</p>
+    
   </div>
 </article>
 
@@ -250,8 +259,9 @@ distribution among relational expression
 and [<a href="https://issues.apache.org/jira/browse/CALCITE-307">CALCITE-307</a>]
 improve implicit and explicit conversions in SQL.</p>
 
-<p>See the <a href="/docs/history.html#v1-2-0">release notes</a>.</p>
-
+    
+    <p>See the <a href="/docs/history.html#v1-2-0">release notes</a>.</p>
+    
   </div>
 </article>
 
@@ -331,8 +341,9 @@ later.</p>
 <code>RelNode</code>. We strongly suggest that you use these rather than
 calling constructors directly.</p>
 
-<p>See the <a href="/docs/history.html#v1-1-0">release notes</a>.</p>
-
+    
+    <p>See the <a href="/docs/history.html#v1-1-0">release notes</a>.</p>
+    
   </div>
 </article>
 
@@ -413,8 +424,292 @@ improvements to the algorithms that impl
 including an interpreter that can evaluate queries without compilation;
 and fixes about 30 bugs.</p>
 
-<p>See the <a href="/docs/history.html#v1-0-0">release notes</a>.</p>
+    
+    <p>See the <a href="/docs/history.html#v1-0-0">release notes</a>.</p>
+    
+  </div>
+</article>
+
 
+  <article>
+  <h2>
+    <a href="/news/2014/11/05/release-0.9.2-incubating/">
+      Release 0.9.2 Incubating
+    </a>
+  </h2>
+  <span class="post-category">
+    <span class="label">
+      release
+    </span>
+  </span>
+  <div class="post-meta">
+    <span class="post-date">
+      05 Nov 2014
+    </span>
+    
+    
+    
+      
+    
+      
+    
+      
+    
+      
+    
+      
+    
+      
+    
+      
+    
+      
+    
+      
+    
+      
+        
+          
+        
+        
+          
+        
+      
+    
+      
+    
+      
+    
+      
+    
+      
+    
+    <a href="http://people.apache.org/~jhyde" class="post-author">
+      <img src="http://github.com/julianhyde.png"
+           class="avatar" alt="jhyde avatar"
+           width="24" height="24">
+      jhyde
+    </a>
+  </div>
+  <div class="post-content">
+    <p>A fairly minor release, and last release before we rename all of the
+packages and lots of classes, in what we expect to call 1.0. If you
+have an existing application, it’s worth upgrading to this first,
+before you move on to 1.0.</p>
+
+    
+    <p>See the <a href="/docs/history.html#v0-9-2">release notes</a>.</p>
+    
+  </div>
+</article>
+
+
+  <article>
+  <h2>
+    <a href="/news/2014/10/02/release-0.9.1-incubating/">
+      Release 0.9.1 Incubating
+    </a>
+  </h2>
+  <span class="post-category">
+    <span class="label">
+      release
+    </span>
+  </span>
+  <div class="post-meta">
+    <span class="post-date">
+      02 Oct 2014
+    </span>
+    
+    
+    
+      
+    
+      
+    
+      
+    
+      
+    
+      
+    
+      
+    
+      
+    
+      
+    
+      
+    
+      
+        
+          
+        
+        
+          
+        
+      
+    
+      
+    
+      
+    
+      
+    
+      
+    
+    <a href="http://people.apache.org/~jhyde" class="post-author">
+      <img src="http://github.com/julianhyde.png"
+           class="avatar" alt="jhyde avatar"
+           width="24" height="24">
+      jhyde
+    </a>
+  </div>
+  <div class="post-content">
+    <p>This is the first release as Calcite. (The project was previously called Optiq.)</p>
+
+    
+    <p>See the <a href="/docs/history.html#v0-9-1">release notes</a>.</p>
+    
+  </div>
+</article>
+
+
+  <article>
+  <h2>
+    <a href="/news/2014/08/19/release-0.9.0-incubating/">
+      Release 0.9.0 Incubating
+    </a>
+  </h2>
+  <span class="post-category">
+    <span class="label">
+      release
+    </span>
+  </span>
+  <div class="post-meta">
+    <span class="post-date">
+      19 Aug 2014
+    </span>
+    
+    
+    
+      
+    
+      
+    
+      
+    
+      
+    
+      
+    
+      
+    
+      
+    
+      
+    
+      
+    
+      
+        
+          
+        
+        
+          
+        
+      
+    
+      
+    
+      
+    
+      
+    
+      
+    
+    <a href="http://people.apache.org/~jhyde" class="post-author">
+      <img src="http://github.com/julianhyde.png"
+           class="avatar" alt="jhyde avatar"
+           width="24" height="24">
+      jhyde
+    </a>
+  </div>
+  <div class="post-content">
+    <p>This is the first release under the Apache incubator process.</p>
+
+    
+    <p>See the <a href="/docs/history.html#v0-9-0">release notes</a>.</p>
+    
+  </div>
+</article>
+
+
+  <article>
+  <h2>
+    <a href="/news/2014/06/27/release-0.8.0-incubating/">
+      Release 0.8.0 Incubating
+    </a>
+  </h2>
+  <span class="post-category">
+    <span class="label">
+      release
+    </span>
+  </span>
+  <div class="post-meta">
+    <span class="post-date">
+      27 Jun 2014
+    </span>
+    
+    
+    
+      
+    
+      
+    
+      
+    
+      
+    
+      
+    
+      
+    
+      
+    
+      
+    
+      
+    
+      
+        
+          
+        
+        
+          
+        
+      
+    
+      
+    
+      
+    
+      
+    
+      
+    
+    <a href="http://people.apache.org/~jhyde" class="post-author">
+      <img src="http://github.com/julianhyde.png"
+           class="avatar" alt="jhyde avatar"
+           width="24" height="24">
+      jhyde
+    </a>
+  </div>
+  <div class="post-content">
+    <p>This is the first release under the Apache incubator process.</p>
+
+    
+    <p>See the <a href="/docs/history.html#v0-8">release notes</a>.</p>
+    
   </div>
 </article>
 
@@ -451,6 +746,10 @@ and fixes about 30 bugs.</p>
         <a href="/news/2015/01/31/release-1.0.0-incubating/">1.0.0-incubating</a>
       </li>
       
+      <li class="">
+        <a href="/news/2014/11/05/release-0.9.2-incubating/">0.9.2-incubating</a>
+      </li>
+      
     </ul>
     <h4>Other News</h4>
     <ul>
@@ -464,6 +763,14 @@ and fixes about 30 bugs.</p>
         
         
         
+        
+        
+        
+        
+        
+        
+        
+