Modified: calcite/site/docs/reference.html
URL: 
http://svn.apache.org/viewvc/calcite/site/docs/reference.html?rev=1823715&r1=1823714&r2=1823715&view=diff
==============================================================================
--- calcite/site/docs/reference.html (original)
+++ calcite/site/docs/reference.html Fri Feb  9 23:07:13 2018
@@ -4,7 +4,7 @@
   <meta charset="UTF-8">
   <title>SQL language</title>
   <meta name="viewport" content="width=device-width,initial-scale=1">
-  <meta name="generator" content="Jekyll v3.0.3">
+  <meta name="generator" content="Jekyll v3.5.1">
   <link rel="stylesheet" 
href="//fonts.googleapis.com/css?family=Lato:300,300italic,400,400italic,700,700italic,900">
   <link rel="stylesheet" href="/css/screen.css">
   <link rel="icon" type="image/x-icon" href="/favicon.ico">
@@ -159,12 +159,12 @@
 }
 </style>
 
-<p>The page describes the SQL dialect recognized by Calcite’s default SQL 
parser.</p>
+The page describes the SQL dialect recognized by Calcite's default SQL parser.
 
-<h2 id="grammar">Grammar</h2>
+## Grammar
 
-<p>SQL grammar in <a 
href="http://en.wikipedia.org/wiki/Backus%E2%80%93Naur_Form";>BNF</a>-like
-form.</p>
+SQL grammar in 
[BNF](http://en.wikipedia.org/wiki/Backus%E2%80%93Naur_Form)-like
+form.
 
 <figure class="highlight"><pre><code class="language-sql" 
data-lang="sql"><span class="k">statement</span><span class="p">:</span>
       <span class="n">setStatement</span>
@@ -234,9 +234,9 @@ form.</p>
       <span class="o">|</span>   <span class="n">query</span> <span 
class="k">INTERSECT</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="n">query</span>
       <span class="err">}</span>
       <span class="p">[</span> <span class="k">ORDER</span> <span 
class="k">BY</span> <span class="n">orderItem</span> <span class="p">[,</span> 
<span class="n">orderItem</span> <span class="p">]</span><span 
class="o">*</span> <span class="p">]</span>
-      <span class="p">[</span> <span class="k">LIMIT</span> <span 
class="p">[</span> <span class="k">start</span><span class="p">,</span> <span 
class="p">]</span> <span class="err">{</span> <span class="k">count</span> 
<span class="o">|</span> <span class="k">ALL</span> <span class="err">}</span> 
<span class="p">]</span>
+      <span class="p">[</span> <span class="k">LIMIT</span> <span 
class="err">{</span> <span class="k">count</span> <span class="o">|</span> 
<span class="k">ALL</span> <span class="err">}</span> <span class="p">]</span>
       <span class="p">[</span> <span class="k">OFFSET</span> <span 
class="k">start</span> <span class="err">{</span> <span class="k">ROW</span> 
<span class="o">|</span> <span class="k">ROWS</span> <span class="err">}</span> 
<span class="p">]</span>
-      <span class="p">[</span> <span class="k">FETCH</span> <span 
class="err">{</span> <span class="k">FIRST</span> <span class="o">|</span> 
<span class="k">NEXT</span> <span class="err">}</span> <span class="p">[</span> 
<span class="k">count</span> <span class="p">]</span> <span 
class="err">{</span> <span class="k">ROW</span> <span class="o">|</span> <span 
class="k">ROWS</span> <span class="err">}</span> <span class="k">ONLY</span> 
<span class="p">]</span>
+      <span class="p">[</span> <span class="k">FETCH</span> <span 
class="err">{</span> <span class="k">FIRST</span> <span class="o">|</span> 
<span class="k">NEXT</span> <span class="err">}</span> <span class="p">[</span> 
<span class="k">count</span> <span class="p">]</span> <span 
class="err">{</span> <span class="k">ROW</span> <span class="o">|</span> <span 
class="k">ROWS</span> <span class="err">}</span> <span class="p">]</span>
 
 <span class="n">withItem</span><span class="p">:</span>
       <span class="n">name</span>
@@ -281,14 +281,10 @@ 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="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 class="s1">')'</span>
 
-<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="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>
 
@@ -315,429 +311,417 @@ form.</p>
       <span class="p">]</span>
       <span class="s1">')'</span></code></pre></figure>
 
-<p>In <em>insert</em>, if the INSERT or UPSERT statement does not specify a
+In *insert*, if the INSERT or UPSERT statement does not specify a
 list of target columns, the query must have the same number of
 columns as the target table, except in certain
-<a 
href="/apidocs/org/apache/calcite/sql/validate/SqlConformance.html#isInsertSubsetColumnsAllowed--">conformance
 levels</a>.</p>
-
-<p>In <em>merge</em>, at least one of the WHEN MATCHED and WHEN NOT MATCHED 
clauses must
-be present.</p>
+[conformance 
levels](/apidocs/org/apache/calcite/sql/validate/SqlConformance.html#isInsertSubsetColumnsAllowed--).
 
-<p><em>tablePrimary</em> may only contain an EXTEND clause in certain
-<a 
href="/apidocs/org/apache/calcite/sql/validate/SqlConformance.html#allowExtend--">conformance
 levels</a>;
-in those same conformance levels, any <em>column</em> in <em>insert</em> may 
be replaced by
-<em>columnDecl</em>, which has a similar effect to including it in an EXTEND 
clause.</p>
+In *merge*, at least one of the WHEN MATCHED and WHEN NOT MATCHED clauses must
+be present.
 
-<p>In <em>orderItem</em>, if <em>expression</em> is a positive integer 
<em>n</em>, it denotes
-the <em>n</em>th item in the SELECT clause.</p>
+In *orderItem*, if *expression* is a positive integer *n*, it denotes
+the <em>n</em>th item in the SELECT clause.
 
-<p>In <em>query</em>, <em>count</em> and <em>start</em> may each be either an 
unsigned integer literal
-or a dynamic parameter whose value is an integer.</p>
-
-<p>An aggregate query is a query that contains a GROUP BY or a HAVING
+An aggregate query is a query that contains a GROUP BY or a HAVING
 clause, or aggregate functions in the SELECT clause. In the SELECT,
 HAVING and ORDER BY clauses of an aggregate query, all expressions
 must be constant within the current group (that is, grouping constants
 as defined by the GROUP BY clause, or constants), or aggregate
 functions, or a combination of constants and aggregate
 functions. Aggregate and grouping functions may only appear in an
-aggregate query, and only in a SELECT, HAVING or ORDER BY clause.</p>
+aggregate query, and only in a SELECT, HAVING or ORDER BY clause.
 
-<p>A scalar sub-query is a sub-query used as an expression.
+A scalar sub-query is a sub-query used as an expression.
 If the sub-query returns no rows, the value is NULL; if it
-returns more than one row, it is an error.</p>
+returns more than one row, it is an error.
 
-<p>IN, EXISTS and scalar sub-queries can occur
+IN, EXISTS and scalar sub-queries can occur
 in any place where an expression can occur (such as the SELECT clause,
 WHERE clause, ON clause of a JOIN, or as an argument to an aggregate
-function).</p>
+function).
 
-<p>An IN, EXISTS or scalar sub-query may be correlated; that is, it
-may refer to tables in the FROM clause of an enclosing query.</p>
+An IN, EXISTS or scalar sub-query may be correlated; that is, it
+may refer to tables in the FROM clause of an enclosing query.
 
-<p><em>selectWithoutFrom</em> is equivalent to VALUES,
+*selectWithoutFrom* is equivalent to VALUES,
 but is not standard SQL and is only allowed in certain
-<a 
href="/apidocs/org/apache/calcite/sql/validate/SqlConformance.html#isFromRequired--">conformance
 levels</a>.</p>
+[conformance 
levels](/apidocs/org/apache/calcite/sql/validate/SqlConformance.html#isFromRequired--).
 
-<p>MINUS is equivalent to EXCEPT,
+MINUS is equivalent to EXCEPT,
 but is not standard SQL and is only allowed in certain
-<a 
href="/apidocs/org/apache/calcite/sql/validate/SqlConformance.html#isMinusAllowed--">conformance
 levels</a>.</p>
+[conformance 
levels](/apidocs/org/apache/calcite/sql/validate/SqlConformance.html#isMinusAllowed--).
 
-<p>CROSS APPLY and OUTER APPLY are only allowed in certain
-<a 
href="/apidocs/org/apache/calcite/sql/validate/SqlConformance.html#isApplyAllowed--">conformance
 levels</a>.</p>
+CROSS APPLY and OUTER APPLY are only allowed in certain
+[conformance 
levels](/apidocs/org/apache/calcite/sql/validate/SqlConformance.html#isApplyAllowed--).
 
-<p>“LIMIT start, count” is equivalent to “LIMIT count OFFSET start”
-but is only allowed in certain
-<a 
href="/apidocs/org/apache/calcite/sql/validate/SqlConformance.html#isLimitStartCountAllowed--">conformance
 levels</a>.</p>
+## Keywords
 
-<h2 id="keywords">Keywords</h2>
+The following is a list of SQL keywords.
+Reserved keywords are **bold**.
 
-<p>The following is a list of SQL keywords.
-Reserved keywords are <strong>bold</strong>.</p>
 
-<p>A,
-<strong>ABS</strong>,
+A,
+**ABS**,
 ABSOLUTE,
 ACTION,
 ADA,
 ADD,
 ADMIN,
 AFTER,
-<strong>ALL</strong>,
-<strong>ALLOCATE</strong>,
-<strong>ALLOW</strong>,
-<strong>ALTER</strong>,
+**ALL**,
+**ALLOCATE**,
+**ALLOW**,
+**ALTER**,
 ALWAYS,
-<strong>AND</strong>,
-<strong>ANY</strong>,
+**AND**,
+**ANY**,
 APPLY,
-<strong>ARE</strong>,
-<strong>ARRAY</strong>,
-<strong>ARRAY_MAX_CARDINALITY</strong>,
-<strong>AS</strong>,
+**ARE**,
+**ARRAY**,
+**ARRAY_MAX_CARDINALITY**,
+**AS**,
 ASC,
-<strong>ASENSITIVE</strong>,
+**ASENSITIVE**,
 ASSERTION,
 ASSIGNMENT,
-<strong>ASYMMETRIC</strong>,
-<strong>AT</strong>,
-<strong>ATOMIC</strong>,
+**ASYMMETRIC**,
+**AT**,
+**ATOMIC**,
 ATTRIBUTE,
 ATTRIBUTES,
-<strong>AUTHORIZATION</strong>,
-<strong>AVG</strong>,
+**AUTHORIZATION**,
+**AVG**,
 BEFORE,
-<strong>BEGIN</strong>,
-<strong>BEGIN_FRAME</strong>,
-<strong>BEGIN_PARTITION</strong>,
+**BEGIN**,
+**BEGIN_FRAME**,
+**BEGIN_PARTITION**,
 BERNOULLI,
-<strong>BETWEEN</strong>,
-<strong>BIGINT</strong>,
-<strong>BINARY</strong>,
-<strong>BIT</strong>,
-<strong>BLOB</strong>,
-<strong>BOOLEAN</strong>,
-<strong>BOTH</strong>,
+**BETWEEN**,
+**BIGINT**,
+**BINARY**,
+**BIT**,
+**BLOB**,
+**BOOLEAN**,
+**BOTH**,
 BREADTH,
-<strong>BY</strong>,
+**BY**,
 C,
-<strong>CALL</strong>,
-<strong>CALLED</strong>,
-<strong>CARDINALITY</strong>,
+**CALL**,
+**CALLED**,
+**CARDINALITY**,
 CASCADE,
-<strong>CASCADED</strong>,
-<strong>CASE</strong>,
-<strong>CAST</strong>,
+**CASCADED**,
+**CASE**,
+**CAST**,
 CATALOG,
 CATALOG_NAME,
-<strong>CEIL</strong>,
-<strong>CEILING</strong>,
+**CEIL**,
+**CEILING**,
 CENTURY,
 CHAIN,
-<strong>CHAR</strong>,
-<strong>CHARACTER</strong>,
+**CHAR**,
+**CHARACTER**,
 CHARACTERISTICS,
 CHARACTERS,
-<strong>CHARACTER_LENGTH</strong>,
+**CHARACTER_LENGTH**,
 CHARACTER_SET_CATALOG,
 CHARACTER_SET_NAME,
 CHARACTER_SET_SCHEMA,
-<strong>CHAR_LENGTH</strong>,
-<strong>CHECK</strong>,
-<strong>CLASSIFIER</strong>,
+**CHAR_LENGTH**,
+**CHECK**,
+**CLASSIFIER**,
 CLASS_ORIGIN,
-<strong>CLOB</strong>,
-<strong>CLOSE</strong>,
-<strong>COALESCE</strong>,
+**CLOB**,
+**CLOSE**,
+**COALESCE**,
 COBOL,
-<strong>COLLATE</strong>,
+**COLLATE**,
 COLLATION,
 COLLATION_CATALOG,
 COLLATION_NAME,
 COLLATION_SCHEMA,
-<strong>COLLECT</strong>,
-<strong>COLUMN</strong>,
+**COLLECT**,
+**COLUMN**,
 COLUMN_NAME,
 COMMAND_FUNCTION,
 COMMAND_FUNCTION_CODE,
-<strong>COMMIT</strong>,
+**COMMIT**,
 COMMITTED,
-<strong>CONDITION</strong>,
+**CONDITION**,
 CONDITION_NUMBER,
-<strong>CONNECT</strong>,
+**CONNECT**,
 CONNECTION,
 CONNECTION_NAME,
-<strong>CONSTRAINT</strong>,
+**CONSTRAINT**,
 CONSTRAINTS,
 CONSTRAINT_CATALOG,
 CONSTRAINT_NAME,
 CONSTRAINT_SCHEMA,
 CONSTRUCTOR,
-<strong>CONTAINS</strong>,
+**CONTAINS**,
 CONTINUE,
-<strong>CONVERT</strong>,
-<strong>CORR</strong>,
-<strong>CORRESPONDING</strong>,
-<strong>COUNT</strong>,
-<strong>COVAR_POP</strong>,
-<strong>COVAR_SAMP</strong>,
-<strong>CREATE</strong>,
-<strong>CROSS</strong>,
-<strong>CUBE</strong>,
-<strong>CUME_DIST</strong>,
-<strong>CURRENT</strong>,
-<strong>CURRENT_CATALOG</strong>,
-<strong>CURRENT_DATE</strong>,
-<strong>CURRENT_DEFAULT_TRANSFORM_GROUP</strong>,
-<strong>CURRENT_PATH</strong>,
-<strong>CURRENT_ROLE</strong>,
-<strong>CURRENT_ROW</strong>,
-<strong>CURRENT_SCHEMA</strong>,
-<strong>CURRENT_TIME</strong>,
-<strong>CURRENT_TIMESTAMP</strong>,
-<strong>CURRENT_TRANSFORM_GROUP_FOR_TYPE</strong>,
-<strong>CURRENT_USER</strong>,
-<strong>CURSOR</strong>,
+**CONVERT**,
+**CORR**,
+**CORRESPONDING**,
+**COUNT**,
+**COVAR_POP**,
+**COVAR_SAMP**,
+**CREATE**,
+**CROSS**,
+**CUBE**,
+**CUME_DIST**,
+**CURRENT**,
+**CURRENT_CATALOG**,
+**CURRENT_DATE**,
+**CURRENT_DEFAULT_TRANSFORM_GROUP**,
+**CURRENT_PATH**,
+**CURRENT_ROLE**,
+**CURRENT_ROW**,
+**CURRENT_SCHEMA**,
+**CURRENT_TIME**,
+**CURRENT_TIMESTAMP**,
+**CURRENT_TRANSFORM_GROUP_FOR_TYPE**,
+**CURRENT_USER**,
+**CURSOR**,
 CURSOR_NAME,
-<strong>CYCLE</strong>,
+**CYCLE**,
 DATA,
 DATABASE,
-<strong>DATE</strong>,
+**DATE**,
 DATETIME_INTERVAL_CODE,
 DATETIME_INTERVAL_PRECISION,
-<strong>DAY</strong>,
-<strong>DEALLOCATE</strong>,
-<strong>DEC</strong>,
+**DAY**,
+**DEALLOCATE**,
+**DEC**,
 DECADE,
-<strong>DECIMAL</strong>,
-<strong>DECLARE</strong>,
-<strong>DEFAULT</strong>,
+**DECIMAL**,
+**DECLARE**,
+**DEFAULT**,
 DEFAULTS,
 DEFERRABLE,
 DEFERRED,
-<strong>DEFINE</strong>,
+**DEFINE**,
 DEFINED,
 DEFINER,
 DEGREE,
-<strong>DELETE</strong>,
-<strong>DENSE_RANK</strong>,
+**DELETE**,
+**DENSE_RANK**,
 DEPTH,
-<strong>DEREF</strong>,
+**DEREF**,
 DERIVED,
 DESC,
-<strong>DESCRIBE</strong>,
+**DESCRIBE**,
 DESCRIPTION,
 DESCRIPTOR,
-<strong>DETERMINISTIC</strong>,
+**DETERMINISTIC**,
 DIAGNOSTICS,
-<strong>DISALLOW</strong>,
-<strong>DISCONNECT</strong>,
+**DISALLOW**,
+**DISCONNECT**,
 DISPATCH,
-<strong>DISTINCT</strong>,
+**DISTINCT**,
 DOMAIN,
-<strong>DOUBLE</strong>,
+**DOUBLE**,
 DOW,
 DOY,
-<strong>DROP</strong>,
-<strong>DYNAMIC</strong>,
+**DROP**,
+**DYNAMIC**,
 DYNAMIC_FUNCTION,
 DYNAMIC_FUNCTION_CODE,
-<strong>EACH</strong>,
-<strong>ELEMENT</strong>,
-<strong>ELSE</strong>,
-<strong>EMPTY</strong>,
-<strong>END</strong>,
-<strong>END-EXEC</strong>,
-<strong>END_FRAME</strong>,
-<strong>END_PARTITION</strong>,
+**EACH**,
+**ELEMENT**,
+**ELSE**,
+**EMPTY**,
+**END**,
+**END-EXEC**,
+**END_FRAME**,
+**END_PARTITION**,
 EPOCH,
-<strong>EQUALS</strong>,
-<strong>ESCAPE</strong>,
-<strong>EVERY</strong>,
-<strong>EXCEPT</strong>,
+**EQUALS**,
+**ESCAPE**,
+**EVERY**,
+**EXCEPT**,
 EXCEPTION,
 EXCLUDE,
 EXCLUDING,
-<strong>EXEC</strong>,
-<strong>EXECUTE</strong>,
-<strong>EXISTS</strong>,
-<strong>EXP</strong>,
-<strong>EXPLAIN</strong>,
-<strong>EXTEND</strong>,
-<strong>EXTERNAL</strong>,
-<strong>EXTRACT</strong>,
-<strong>FALSE</strong>,
-<strong>FETCH</strong>,
-<strong>FILTER</strong>,
+**EXEC**,
+**EXECUTE**,
+**EXISTS**,
+**EXP**,
+**EXPLAIN**,
+**EXTEND**,
+**EXTERNAL**,
+**EXTRACT**,
+**FALSE**,
+**FETCH**,
+**FILTER**,
 FINAL,
 FIRST,
-<strong>FIRST_VALUE</strong>,
-<strong>FLOAT</strong>,
-<strong>FLOOR</strong>,
+**FIRST_VALUE**,
+**FLOAT**,
+**FLOOR**,
 FOLLOWING,
-<strong>FOR</strong>,
-<strong>FOREIGN</strong>,
+**FOR**,
+**FOREIGN**,
 FORTRAN,
 FOUND,
 FRAC_SECOND,
-<strong>FRAME_ROW</strong>,
-<strong>FREE</strong>,
-<strong>FROM</strong>,
-<strong>FULL</strong>,
-<strong>FUNCTION</strong>,
-<strong>FUSION</strong>,
+**FRAME_ROW**,
+**FREE**,
+**FROM**,
+**FULL**,
+**FUNCTION**,
+**FUSION**,
 G,
 GENERAL,
 GENERATED,
-GEOMETRY,
-<strong>GET</strong>,
-<strong>GLOBAL</strong>,
+**GET**,
+**GLOBAL**,
 GO,
 GOTO,
-<strong>GRANT</strong>,
+**GRANT**,
 GRANTED,
-<strong>GROUP</strong>,
-<strong>GROUPING</strong>,
-<strong>GROUPS</strong>,
-<strong>HAVING</strong>,
+**GROUP**,
+**GROUPING**,
+**GROUPS**,
+**HAVING**,
 HIERARCHY,
-<strong>HOLD</strong>,
-<strong>HOUR</strong>,
-<strong>IDENTITY</strong>,
+**HOLD**,
+**HOUR**,
+**IDENTITY**,
 IMMEDIATE,
 IMMEDIATELY,
 IMPLEMENTATION,
-<strong>IMPORT</strong>,
-<strong>IN</strong>,
+**IMPORT**,
+**IN**,
 INCLUDING,
 INCREMENT,
-<strong>INDICATOR</strong>,
-<strong>INITIAL</strong>,
+**INDICATOR**,
+**INITIAL**,
 INITIALLY,
-<strong>INNER</strong>,
-<strong>INOUT</strong>,
+**INNER**,
+**INOUT**,
 INPUT,
-<strong>INSENSITIVE</strong>,
-<strong>INSERT</strong>,
+**INSENSITIVE**,
+**INSERT**,
 INSTANCE,
 INSTANTIABLE,
-<strong>INT</strong>,
-<strong>INTEGER</strong>,
-<strong>INTERSECT</strong>,
-<strong>INTERSECTION</strong>,
-<strong>INTERVAL</strong>,
-<strong>INTO</strong>,
+**INT**,
+**INTEGER**,
+**INTERSECT**,
+**INTERSECTION**,
+**INTERVAL**,
+**INTO**,
 INVOKER,
-<strong>IS</strong>,
+**IS**,
 ISOLATION,
 JAVA,
-<strong>JOIN</strong>,
+**JOIN**,
 JSON,
 K,
 KEY,
 KEY_MEMBER,
 KEY_TYPE,
 LABEL,
-<strong>LAG</strong>,
-<strong>LANGUAGE</strong>,
-<strong>LARGE</strong>,
+**LAG**,
+**LANGUAGE**,
+**LARGE**,
 LAST,
-<strong>LAST_VALUE</strong>,
-<strong>LATERAL</strong>,
-<strong>LEAD</strong>,
-<strong>LEADING</strong>,
-<strong>LEFT</strong>,
+**LAST_VALUE**,
+**LATERAL**,
+**LEAD**,
+**LEADING**,
+**LEFT**,
 LENGTH,
 LEVEL,
 LIBRARY,
-<strong>LIKE</strong>,
-<strong>LIKE_REGEX</strong>,
-<strong>LIMIT</strong>,
-<strong>LN</strong>,
-<strong>LOCAL</strong>,
-<strong>LOCALTIME</strong>,
-<strong>LOCALTIMESTAMP</strong>,
+**LIKE**,
+**LIKE_REGEX**,
+**LIMIT**,
+**LN**,
+**LOCAL**,
+**LOCALTIME**,
+**LOCALTIMESTAMP**,
 LOCATOR,
-<strong>LOWER</strong>,
+**LOWER**,
 M,
 MAP,
-<strong>MATCH</strong>,
+**MATCH**,
 MATCHED,
-<strong>MATCHES</strong>,
-<strong>MATCH_NUMBER</strong>,
-<strong>MATCH_RECOGNIZE</strong>,
-<strong>MAX</strong>,
+**MATCHES**,
+**MATCH_NUMBER**,
+**MATCH_RECOGNIZE**,
+**MAX**,
 MAXVALUE,
-<strong>MEASURES</strong>,
-<strong>MEMBER</strong>,
-<strong>MERGE</strong>,
+**MEASURES**,
+**MEMBER**,
+**MERGE**,
 MESSAGE_LENGTH,
 MESSAGE_OCTET_LENGTH,
 MESSAGE_TEXT,
-<strong>METHOD</strong>,
+**METHOD**,
 MICROSECOND,
 MILLENNIUM,
-<strong>MIN</strong>,
-<strong>MINUS</strong>,
-<strong>MINUTE</strong>,
+**MIN**,
+**MINUS**,
+**MINUTE**,
 MINVALUE,
-<strong>MOD</strong>,
-<strong>MODIFIES</strong>,
-<strong>MODULE</strong>,
-<strong>MONTH</strong>,
+**MOD**,
+**MODIFIES**,
+**MODULE**,
+**MONTH**,
 MORE,
-<strong>MULTISET</strong>,
+**MULTISET**,
 MUMPS,
 NAME,
 NAMES,
-<strong>NATIONAL</strong>,
-<strong>NATURAL</strong>,
-<strong>NCHAR</strong>,
-<strong>NCLOB</strong>,
+**NATIONAL**,
+**NATURAL**,
+**NCHAR**,
+**NCLOB**,
 NESTING,
-<strong>NEW</strong>,
-<strong>NEXT</strong>,
-<strong>NO</strong>,
-<strong>NONE</strong>,
-<strong>NORMALIZE</strong>,
+**NEW**,
+**NEXT**,
+**NO**,
+**NONE**,
+**NORMALIZE**,
 NORMALIZED,
-<strong>NOT</strong>,
-<strong>NTH_VALUE</strong>,
-<strong>NTILE</strong>,
-<strong>NULL</strong>,
+**NOT**,
+**NTH_VALUE**,
+**NTILE**,
+**NULL**,
 NULLABLE,
-<strong>NULLIF</strong>,
+**NULLIF**,
 NULLS,
 NUMBER,
-<strong>NUMERIC</strong>,
+**NUMERIC**,
 OBJECT,
-<strong>OCCURRENCES_REGEX</strong>,
+**OCCURRENCES_REGEX**,
 OCTETS,
-<strong>OCTET_LENGTH</strong>,
-<strong>OF</strong>,
-<strong>OFFSET</strong>,
-<strong>OLD</strong>,
-<strong>OMIT</strong>,
-<strong>ON</strong>,
-<strong>ONE</strong>,
-<strong>ONLY</strong>,
-<strong>OPEN</strong>,
+**OCTET_LENGTH**,
+**OF**,
+**OFFSET**,
+**OLD**,
+**OMIT**,
+**ON**,
+**ONE**,
+**ONLY**,
+**OPEN**,
 OPTION,
 OPTIONS,
-<strong>OR</strong>,
-<strong>ORDER</strong>,
+**OR**,
+**ORDER**,
 ORDERING,
 ORDINALITY,
 OTHERS,
-<strong>OUT</strong>,
-<strong>OUTER</strong>,
+**OUT**,
+**OUTER**,
 OUTPUT,
-<strong>OVER</strong>,
-<strong>OVERLAPS</strong>,
-<strong>OVERLAY</strong>,
+**OVER**,
+**OVERLAPS**,
+**OVERLAY**,
 OVERRIDING,
 PAD,
-<strong>PARAMETER</strong>,
+**PARAMETER**,
 PARAMETER_MODE,
 PARAMETER_NAME,
 PARAMETER_ORDINAL_POSITION,
@@ -745,125 +729,125 @@ PARAMETER_SPECIFIC_CATALOG,
 PARAMETER_SPECIFIC_NAME,
 PARAMETER_SPECIFIC_SCHEMA,
 PARTIAL,
-<strong>PARTITION</strong>,
+**PARTITION**,
 PASCAL,
 PASSTHROUGH,
 PAST,
 PATH,
-<strong>PATTERN</strong>,
-<strong>PER</strong>,
-<strong>PERCENT</strong>,
-<strong>PERCENTILE_CONT</strong>,
-<strong>PERCENTILE_DISC</strong>,
-<strong>PERCENT_RANK</strong>,
-<strong>PERIOD</strong>,
-<strong>PERMUTE</strong>,
+**PATTERN**,
+**PER**,
+**PERCENT**,
+**PERCENTILE_CONT**,
+**PERCENTILE_DISC**,
+**PERCENT_RANK**,
+**PERIOD**,
+**PERMUTE**,
 PLACING,
 PLAN,
 PLI,
-<strong>PORTION</strong>,
-<strong>POSITION</strong>,
-<strong>POSITION_REGEX</strong>,
-<strong>POWER</strong>,
-<strong>PRECEDES</strong>,
+**PORTION**,
+**POSITION**,
+**POSITION_REGEX**,
+**POWER**,
+**PRECEDES**,
 PRECEDING,
-<strong>PRECISION</strong>,
-<strong>PREPARE</strong>,
+**PRECISION**,
+**PREPARE**,
 PRESERVE,
-<strong>PREV</strong>,
-<strong>PRIMARY</strong>,
+**PREV**,
+**PRIMARY**,
 PRIOR,
 PRIVILEGES,
-<strong>PROCEDURE</strong>,
+**PROCEDURE**,
 PUBLIC,
 QUARTER,
-<strong>RANGE</strong>,
-<strong>RANK</strong>,
+**RANGE**,
+**RANK**,
 READ,
-<strong>READS</strong>,
-<strong>REAL</strong>,
-<strong>RECURSIVE</strong>,
-<strong>REF</strong>,
-<strong>REFERENCES</strong>,
-<strong>REFERENCING</strong>,
-<strong>REGR_AVGX</strong>,
-<strong>REGR_AVGY</strong>,
-<strong>REGR_COUNT</strong>,
-<strong>REGR_INTERCEPT</strong>,
-<strong>REGR_R2</strong>,
-<strong>REGR_SLOPE</strong>,
-<strong>REGR_SXX</strong>,
-<strong>REGR_SXY</strong>,
-<strong>REGR_SYY</strong>,
+**READS**,
+**REAL**,
+**RECURSIVE**,
+**REF**,
+**REFERENCES**,
+**REFERENCING**,
+**REGR_AVGX**,
+**REGR_AVGY**,
+**REGR_COUNT**,
+**REGR_INTERCEPT**,
+**REGR_R2**,
+**REGR_SLOPE**,
+**REGR_SXX**,
+**REGR_SXY**,
+**REGR_SYY**,
 RELATIVE,
-<strong>RELEASE</strong>,
+**RELEASE**,
 REPEATABLE,
 REPLACE,
-<strong>RESET</strong>,
+**RESET**,
 RESTART,
 RESTRICT,
-<strong>RESULT</strong>,
-<strong>RETURN</strong>,
+**RESULT**,
+**RETURN**,
 RETURNED_CARDINALITY,
 RETURNED_LENGTH,
 RETURNED_OCTET_LENGTH,
 RETURNED_SQLSTATE,
-<strong>RETURNS</strong>,
-<strong>REVOKE</strong>,
-<strong>RIGHT</strong>,
+**RETURNS**,
+**REVOKE**,
+**RIGHT**,
 ROLE,
-<strong>ROLLBACK</strong>,
-<strong>ROLLUP</strong>,
+**ROLLBACK**,
+**ROLLUP**,
 ROUTINE,
 ROUTINE_CATALOG,
 ROUTINE_NAME,
 ROUTINE_SCHEMA,
-<strong>ROW</strong>,
-<strong>ROWS</strong>,
+**ROW**,
+**ROWS**,
 ROW_COUNT,
-<strong>ROW_NUMBER</strong>,
-<strong>RUNNING</strong>,
-<strong>SAVEPOINT</strong>,
+**ROW_NUMBER**,
+**RUNNING**,
+**SAVEPOINT**,
 SCALE,
 SCHEMA,
 SCHEMA_NAME,
-<strong>SCOPE</strong>,
+**SCOPE**,
 SCOPE_CATALOGS,
 SCOPE_NAME,
 SCOPE_SCHEMA,
-<strong>SCROLL</strong>,
-<strong>SEARCH</strong>,
-<strong>SECOND</strong>,
+**SCROLL**,
+**SEARCH**,
+**SECOND**,
 SECTION,
 SECURITY,
-<strong>SEEK</strong>,
-<strong>SELECT</strong>,
+**SEEK**,
+**SELECT**,
 SELF,
-<strong>SENSITIVE</strong>,
+**SENSITIVE**,
 SEQUENCE,
 SERIALIZABLE,
 SERVER,
 SERVER_NAME,
 SESSION,
-<strong>SESSION_USER</strong>,
-<strong>SET</strong>,
+**SESSION_USER**,
+**SET**,
 SETS,
-<strong>SHOW</strong>,
-<strong>SIMILAR</strong>,
+**SHOW**,
+**SIMILAR**,
 SIMPLE,
 SIZE,
-<strong>SKIP</strong>,
-<strong>SMALLINT</strong>,
-<strong>SOME</strong>,
+**SKIP**,
+**SMALLINT**,
+**SOME**,
 SOURCE,
 SPACE,
-<strong>SPECIFIC</strong>,
-<strong>SPECIFICTYPE</strong>,
+**SPECIFIC**,
+**SPECIFICTYPE**,
 SPECIFIC_NAME,
-<strong>SQL</strong>,
-<strong>SQLEXCEPTION</strong>,
-<strong>SQLSTATE</strong>,
-<strong>SQLWARNING</strong>,
+**SQL**,
+**SQLEXCEPTION**,
+**SQLSTATE**,
+**SQLWARNING**,
 SQL_BIGINT,
 SQL_BINARY,
 SQL_BIT,
@@ -913,1124 +897,395 @@ SQL_TSI_WEEK,
 SQL_TSI_YEAR,
 SQL_VARBINARY,
 SQL_VARCHAR,
-<strong>SQRT</strong>,
-<strong>START</strong>,
+**SQRT**,
+**START**,
 STATE,
 STATEMENT,
-<strong>STATIC</strong>,
-<strong>STDDEV_POP</strong>,
-<strong>STDDEV_SAMP</strong>,
-<strong>STREAM</strong>,
+**STATIC**,
+**STDDEV_POP**,
+**STDDEV_SAMP**,
+**STREAM**,
 STRUCTURE,
 STYLE,
 SUBCLASS_ORIGIN,
-<strong>SUBMULTISET</strong>,
-<strong>SUBSET</strong>,
+**SUBMULTISET**,
+**SUBSET**,
 SUBSTITUTE,
-<strong>SUBSTRING</strong>,
-<strong>SUBSTRING_REGEX</strong>,
-<strong>SUCCEEDS</strong>,
-<strong>SUM</strong>,
-<strong>SYMMETRIC</strong>,
-<strong>SYSTEM</strong>,
-<strong>SYSTEM_TIME</strong>,
-<strong>SYSTEM_USER</strong>,
-<strong>TABLE</strong>,
-<strong>TABLESAMPLE</strong>,
+**SUBSTRING**,
+**SUBSTRING_REGEX**,
+**SUCCEEDS**,
+**SUM**,
+**SYMMETRIC**,
+**SYSTEM**,
+**SYSTEM_TIME**,
+**SYSTEM_USER**,
+**TABLE**,
+**TABLESAMPLE**,
 TABLE_NAME,
 TEMPORARY,
-<strong>THEN</strong>,
+**THEN**,
 TIES,
-<strong>TIME</strong>,
-<strong>TIMESTAMP</strong>,
+**TIME**,
+**TIMESTAMP**,
 TIMESTAMPADD,
 TIMESTAMPDIFF,
-<strong>TIMEZONE_HOUR</strong>,
-<strong>TIMEZONE_MINUTE</strong>,
-<strong>TINYINT</strong>,
-<strong>TO</strong>,
+**TIMEZONE_HOUR**,
+**TIMEZONE_MINUTE**,
+**TINYINT**,
+**TO**,
 TOP_LEVEL_COUNT,
-<strong>TRAILING</strong>,
+**TRAILING**,
 TRANSACTION,
 TRANSACTIONS_ACTIVE,
 TRANSACTIONS_COMMITTED,
 TRANSACTIONS_ROLLED_BACK,
 TRANSFORM,
 TRANSFORMS,
-<strong>TRANSLATE</strong>,
-<strong>TRANSLATE_REGEX</strong>,
-<strong>TRANSLATION</strong>,
-<strong>TREAT</strong>,
-<strong>TRIGGER</strong>,
+**TRANSLATE**,
+**TRANSLATE_REGEX**,
+**TRANSLATION**,
+**TREAT**,
+**TRIGGER**,
 TRIGGER_CATALOG,
 TRIGGER_NAME,
 TRIGGER_SCHEMA,
-<strong>TRIM</strong>,
-<strong>TRIM_ARRAY</strong>,
-<strong>TRUE</strong>,
-<strong>TRUNCATE</strong>,
+**TRIM**,
+**TRIM_ARRAY**,
+**TRUE**,
+**TRUNCATE**,
 TYPE,
-<strong>UESCAPE</strong>,
+**UESCAPE**,
 UNBOUNDED,
 UNCOMMITTED,
 UNDER,
-<strong>UNION</strong>,
-<strong>UNIQUE</strong>,
-<strong>UNKNOWN</strong>,
+**UNION**,
+**UNIQUE**,
+**UNKNOWN**,
 UNNAMED,
-<strong>UNNEST</strong>,
-<strong>UPDATE</strong>,
-<strong>UPPER</strong>,
-<strong>UPSERT</strong>,
+**UNNEST**,
+**UPDATE**,
+**UPPER**,
+**UPSERT**,
 USAGE,
-<strong>USER</strong>,
+**USER**,
 USER_DEFINED_TYPE_CATALOG,
 USER_DEFINED_TYPE_CODE,
 USER_DEFINED_TYPE_NAME,
 USER_DEFINED_TYPE_SCHEMA,
-<strong>USING</strong>,
-<strong>VALUE</strong>,
-<strong>VALUES</strong>,
-<strong>VALUE_OF</strong>,
-<strong>VARBINARY</strong>,
-<strong>VARCHAR</strong>,
-<strong>VARYING</strong>,
-<strong>VAR_POP</strong>,
-<strong>VAR_SAMP</strong>,
+**USING**,
+**VALUE**,
+**VALUES**,
+**VALUE_OF**,
+**VARBINARY**,
+**VARCHAR**,
+**VARYING**,
+**VAR_POP**,
+**VAR_SAMP**,
 VERSION,
-<strong>VERSIONING</strong>,
+**VERSIONING**,
 VIEW,
 WEEK,
-<strong>WHEN</strong>,
-<strong>WHENEVER</strong>,
-<strong>WHERE</strong>,
-<strong>WIDTH_BUCKET</strong>,
-<strong>WINDOW</strong>,
-<strong>WITH</strong>,
-<strong>WITHIN</strong>,
-<strong>WITHOUT</strong>,
+**WHEN**,
+**WHENEVER**,
+**WHERE**,
+**WIDTH_BUCKET**,
+**WINDOW**,
+**WITH**,
+**WITHIN**,
+**WITHOUT**,
 WORK,
 WRAPPER,
 WRITE,
 XML,
-<strong>YEAR</strong>,
-ZONE.</p>
+**YEAR**,
+ZONE.
+
 
-<h2 id="identifiers">Identifiers</h2>
+## Identifiers
 
-<p>Identifiers are the names of tables, columns and other metadata
-elements used in a SQL query.</p>
+Identifiers are the names of tables, columns and other metadata
+elements used in a SQL query.
 
-<p>Unquoted identifiers, such as emp, must start with a letter and can
+Unquoted identifiers, such as emp, must start with a letter and can
 only contain letters, digits, and underscores. They are implicitly
-converted to upper case.</p>
+converted to upper case.
 
-<p>Quoted identifiers, such as <code class="highlighter-rouge">"Employee 
Name"</code>, start and end with
+Quoted identifiers, such as `"Employee Name"`, start and end with
 double quotes.  They may contain virtually any character, including
 spaces and other punctuation.  If you wish to include a double quote
 in an identifier, use another double quote to escape it, like this:
-<code class="highlighter-rouge">"An employee called ""Fred""."</code>.</p>
+`"An employee called ""Fred""."`.
 
-<p>In Calcite, matching identifiers to the name of the referenced object is
+In Calcite, matching identifiers to the name of the referenced object is
 case-sensitive.  But remember that unquoted identifiers are implicitly
 converted to upper case before matching, and if the object it refers
 to was created using an unquoted identifier for its name, then its
-name will have been converted to upper case also.</p>
+name will have been converted to upper case also.
 
-<h2 id="data-types">Data types</h2>
+## Data types
 
-<h3 id="scalar-types">Scalar types</h3>
+### Scalar types
 
-<table>
-  <thead>
-    <tr>
-      <th style="text-align: left">Data type</th>
-      <th style="text-align: left">Description</th>
-      <th style="text-align: left">Range and example literals</th>
-    </tr>
-  </thead>
-  <tbody>
-    <tr>
-      <td style="text-align: left">BOOLEAN</td>
-      <td style="text-align: left">Logical values</td>
-      <td style="text-align: left">Values: TRUE, FALSE, UNKNOWN</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">TINYINT</td>
-      <td style="text-align: left">1 byte signed integer</td>
-      <td style="text-align: left">Range is -128 to 127</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">SMALLINT</td>
-      <td style="text-align: left">2 byte signed integer</td>
-      <td style="text-align: left">Range is -32768 to 32767</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">INTEGER, INT</td>
-      <td style="text-align: left">4 byte signed integer</td>
-      <td style="text-align: left">Range is -2147483648 to 2147483647</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">BIGINT</td>
-      <td style="text-align: left">8 byte signed integer</td>
-      <td style="text-align: left">Range is -9223372036854775808 to 
9223372036854775807</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">DECIMAL(p, s)</td>
-      <td style="text-align: left">Fixed point</td>
-      <td style="text-align: left">Example: 123.45 is a DECIMAL(5, 2) 
value.</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">NUMERIC</td>
-      <td style="text-align: left">Fixed point</td>
-      <td style="text-align: left"> </td>
-    </tr>
-    <tr>
-      <td style="text-align: left">REAL, FLOAT</td>
-      <td style="text-align: left">4 byte floating point</td>
-      <td style="text-align: left">6 decimal digits precision</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">DOUBLE</td>
-      <td style="text-align: left">8 byte floating point</td>
-      <td style="text-align: left">15 decimal digits precision</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">CHAR(n), CHARACTER(n)</td>
-      <td style="text-align: left">Fixed-width character string</td>
-      <td style="text-align: left">‘Hello’, ‘’ (empty string), 
_latin1’Hello’, n’Hello’, _UTF16’Hello’, ‘Hello’ ‘there’ 
(literal split into multiple parts)</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">VARCHAR(n), CHARACTER VARYING(n)</td>
-      <td style="text-align: left">Variable-length character string</td>
-      <td style="text-align: left">As CHAR(n)</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">BINARY(n)</td>
-      <td style="text-align: left">Fixed-width binary string</td>
-      <td style="text-align: left">x’45F0AB’, x’’ (empty binary 
string), x’AB’ ‘CD’ (multi-part binary string literal)</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">VARBINARY(n), BINARY VARYING(n)</td>
-      <td style="text-align: left">Variable-length binary string</td>
-      <td style="text-align: left">As BINARY(n)</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">DATE</td>
-      <td style="text-align: left">Date</td>
-      <td style="text-align: left">Example: DATE ‘1969-07-20’</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">TIME</td>
-      <td style="text-align: left">Time of day</td>
-      <td style="text-align: left">Example: TIME ‘20:17:40’</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">TIMESTAMP [ WITHOUT TIME ZONE ]</td>
-      <td style="text-align: left">Date and time</td>
-      <td style="text-align: left">Example: TIMESTAMP ‘1969-07-20 
20:17:40’</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">TIMESTAMP WITH LOCAL TIME ZONE</td>
-      <td style="text-align: left">Date and time with local time zone</td>
-      <td style="text-align: left">Example: TIMESTAMP ‘1969-07-20 20:17:40 
America/Los Angeles’</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">TIMESTAMP WITH TIME ZONE</td>
-      <td style="text-align: left">Date and time with time zone</td>
-      <td style="text-align: left">Example: TIMESTAMP ‘1969-07-20 20:17:40 
America/Los Angeles’</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">INTERVAL timeUnit [ TO timeUnit ]</td>
-      <td style="text-align: left">Date time interval</td>
-      <td style="text-align: left">Examples: INTERVAL ‘1-5’ YEAR TO MONTH, 
INTERVAL ‘45’ DAY, INTERVAL ‘1 2:34:56.789’ DAY TO SECOND</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">GEOMETRY</td>
-      <td style="text-align: left">Geometry</td>
-      <td style="text-align: left">Examples: ST_GeomFromText(‘POINT (30 
10)’)</td>
-    </tr>
-  </tbody>
-</table>
+| Data type   | Description               | Range and examples   |
+|:----------- |:------------------------- |:---------------------|
+| BOOLEAN     | Logical values            | Values: TRUE, FALSE, UNKNOWN
+| TINYINT     | 1 byte signed integer     | Range is -128 to 127
+| SMALLINT    | 2 byte signed integer     | Range is -32768 to 32767
+| INTEGER, INT | 4 byte signed integer    | Range is -2147483648 to 2147483647
+| BIGINT      | 8 byte signed integer     | Range is -9223372036854775808 to 
9223372036854775807
+| DECIMAL(p, s) | Fixed point             | Example: 123.45 is a DECIMAL(5, 2) 
value.
+| NUMERIC     | Fixed point               |
+| REAL, FLOAT | 4 byte floating point     | 6 decimal digits precision
+| DOUBLE      | 8 byte floating point     | 15 decimal digits precision
+| CHAR(n), CHARACTER(n) | Fixed-width character string | 'Hello', '' (empty 
string), _latin1'Hello', n'Hello', _UTF16'Hello', 'Hello' 'there' (literal 
split into multiple parts)
+| VARCHAR(n), CHARACTER VARYING(n) | Variable-length character string | As 
CHAR(n)
+| BINARY(n)   | Fixed-width binary string | x'45F0AB', x'' (empty binary 
string), x'AB' 'CD' (multi-part binary string literal)
+| VARBINARY(n), BINARY VARYING(n) | Variable-length binary string | As 
BINARY(n)
+| DATE        | Date                      | Example: DATE '1969-07-20'
+| TIME        | Time of day               | Example: TIME '20:17:40'
+| TIMESTAMP [ WITHOUT TIME ZONE ] | Date and time | Example: TIMESTAMP 
'1969-07-20 20:17:40'
+| TIMESTAMP WITH TIME ZONE | Date and time with time zone | Example: TIMESTAMP 
'1969-07-20 20:17:40 America/Los Angeles'
+| INTERVAL timeUnit [ TO timeUnit ] | Date time interval | Examples: INTERVAL 
'1:5' YEAR TO MONTH, INTERVAL '45' DAY
 
-<p>Where:</p>
+Where:
 
 <figure class="highlight"><pre><code class="language-sql" 
data-lang="sql"><span class="n">timeUnit</span><span class="p">:</span>
   <span class="n">MILLENNIUM</span> <span class="o">|</span> <span 
class="n">CENTURY</span> <span class="o">|</span> <span class="n">DECADE</span> 
<span class="o">|</span> <span class="k">YEAR</span> <span class="o">|</span> 
<span class="n">QUARTER</span> <span class="o">|</span> <span 
class="k">MONTH</span> <span class="o">|</span> <span class="n">WEEK</span> 
<span class="o">|</span> <span class="n">DOY</span> <span class="o">|</span> 
<span class="n">DOW</span> <span class="o">|</span> <span class="k">DAY</span> 
<span class="o">|</span> <span class="n">HOUR</span> <span class="o">|</span> 
<span class="k">MINUTE</span> <span class="o">|</span> <span 
class="k">SECOND</span> <span class="o">|</span> <span 
class="n">EPOCH</span></code></pre></figure>
 
-<p>Note:</p>
-
-<ul>
-  <li>DATE, TIME and TIMESTAMP have no time zone. For those types, there is not
-even an implicit time zone, such as UTC (as in Java) or the local time zone.
-It is left to the user or application to supply a time zone. In turn,
-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>
-</ul>
-
-<h3 id="non-scalar-types">Non-scalar types</h3>
-
-<table>
-  <thead>
-    <tr>
-      <th style="text-align: left">Type</th>
-      <th style="text-align: left">Description</th>
-    </tr>
-  </thead>
-  <tbody>
-    <tr>
-      <td style="text-align: left">ANY</td>
-      <td style="text-align: left">A value of an unknown type</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">ROW</td>
-      <td style="text-align: left">Row with 1 or more columns</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">MAP</td>
-      <td style="text-align: left">Collection of keys mapped to values</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">MULTISET</td>
-      <td style="text-align: left">Unordered collection that may contain 
duplicates</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">ARRAY</td>
-      <td style="text-align: left">Ordered, contiguous collection that may 
contain duplicates</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">CURSOR</td>
-      <td style="text-align: left">Cursor over the result of executing a 
query</td>
-    </tr>
-  </tbody>
-</table>
-
-<h3 id="spatial-types">Spatial types</h3>
-
-<p>Spatial data is represented as character strings encoded as
-<a href="https://en.wikipedia.org/wiki/Well-known_text";>well-known text 
(WKT)</a>
-or binary strings encoded as
-<a href="https://en.wikipedia.org/wiki/Well-known_binary";>well-known binary 
(WKB)</a>.</p>
-
-<p>Where you would use a literal, apply the <code 
class="highlighter-rouge">ST_GeomFromText</code> function,
-for example <code class="highlighter-rouge">ST_GeomFromText('POINT (30 
10)')</code>.</p>
-
-<table>
-  <thead>
-    <tr>
-      <th style="text-align: left">Data type</th>
-      <th style="text-align: left">Type code</th>
-      <th style="text-align: left">Examples in WKT</th>
-    </tr>
-  </thead>
-  <tbody>
-    <tr>
-      <td style="text-align: left">GEOMETRY</td>
-      <td style="text-align: left">0</td>
-      <td style="text-align: left">generalization of Point, Curve, Surface, 
GEOMETRYCOLLECTION</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">POINT</td>
-      <td style="text-align: left">1</td>
-      <td style="text-align: left"><tt>ST_GeomFromText(​‘POINT (30 
10)’)</tt> is a point in 2D space; <tt>ST_GeomFromText(​‘POINT Z(30 10 
2)’)</tt> is point in 3D space</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">CURVE</td>
-      <td style="text-align: left">13</td>
-      <td style="text-align: left">generalization of LINESTRING</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">LINESTRING</td>
-      <td style="text-align: left">2</td>
-      <td style="text-align: left"><tt>ST_GeomFromText(​‘LINESTRING (30 
10, 10 30, 40 40)’)</tt></td>
-    </tr>
-    <tr>
-      <td style="text-align: left">SURFACE</td>
-      <td style="text-align: left">14</td>
-      <td style="text-align: left">generalization of Polygon, 
PolyhedralSurface</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">POLYGON</td>
-      <td style="text-align: left">3</td>
-      <td style="text-align: left"><tt>ST_GeomFromText(​‘POLYGON ((30 10, 
40 40, 20 40, 10 20, 30 10))’)</tt> is a pentagon; 
<tt>ST_GeomFromText(​‘POLYGON ((35 10, 45 45, 15 40, 10 20, 35 10), (20 30, 
35 35, 30 20, 20 30))’)</tt> is a pentagon with a quadrilateral hole</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">POLYHEDRALSURFACE</td>
-      <td style="text-align: left">15</td>
-      <td style="text-align: left"> </td>
-    </tr>
-    <tr>
-      <td style="text-align: left">GEOMETRYCOLLECTION</td>
-      <td style="text-align: left">7</td>
-      <td style="text-align: left">a collection of zero or more GEOMETRY 
instances; a generalization of MULTIPOINT, MULTILINESTRING, MULTIPOLYGON</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">MULTIPOINT</td>
-      <td style="text-align: left">4</td>
-      <td style="text-align: left"><tt>ST_GeomFromText(​‘MULTIPOINT ((10 
40), (40 30), (20 20), (30 10))’)</tt> is equivalent to 
<tt>ST_GeomFromText(​‘MULTIPOINT (10 40, 40 30, 20 20, 30 10)’)</tt></td>
-    </tr>
-    <tr>
-      <td style="text-align: left">MULTICURVE</td>
-      <td style="text-align: left">-</td>
-      <td style="text-align: left">generalization of MULTILINESTRING</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">MULTILINESTRING</td>
-      <td style="text-align: left">5</td>
-      <td style="text-align: left"><tt>ST_GeomFromText(​‘MULTILINESTRING 
((10 10, 20 20, 10 40), (40 40, 30 30, 40 20, 30 10))’)</tt></td>
-    </tr>
-    <tr>
-      <td style="text-align: left">MULTISURFACE</td>
-      <td style="text-align: left">-</td>
-      <td style="text-align: left">generalization of MULTIPOLYGON</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">MULTIPOLYGON</td>
-      <td style="text-align: left">6</td>
-      <td style="text-align: left"><tt>ST_GeomFromText(`​‘MULTIPOLYGON 
(((30 20, 45 40, 10 40, 30 20)), ((15 5, 40 10, 10 20, 5 10, 15 
5)))’)</tt></td>
-    </tr>
-  </tbody>
-</table>
-
-<h2 id="operators-and-functions">Operators and functions</h2>
-
-<h3 id="operator-precedence">Operator precedence</h3>
-
-<p>The operator precedence and associativity, highest to lowest.</p>
-
-<table>
-  <thead>
-    <tr>
-      <th style="text-align: left">Operator</th>
-      <th style="text-align: left">Associativity</th>
-    </tr>
-  </thead>
-  <tbody>
-    <tr>
-      <td style="text-align: left">.</td>
-      <td style="text-align: left">left</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">[ ] (array element)</td>
-      <td style="text-align: left">left</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">+ - (unary plus, minus)</td>
-      <td style="text-align: left">right</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">* / %</td>
-      <td style="text-align: left">left</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">+ -</td>
-      <td style="text-align: left">left</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">BETWEEN, IN, LIKE, SIMILAR, OVERLAPS, 
CONTAINS etc.</td>
-      <td style="text-align: left">-</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">&lt; &gt; = &lt;= &gt;= &lt;&gt; !=</td>
-      <td style="text-align: left">left</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">IS NULL, IS FALSE, IS NOT TRUE etc.</td>
-      <td style="text-align: left">-</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">NOT</td>
-      <td style="text-align: left">right</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">AND</td>
-      <td style="text-align: left">left</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">OR</td>
-      <td style="text-align: left">left</td>
-    </tr>
-  </tbody>
-</table>
-
-<h3 id="comparison-operators">Comparison operators</h3>
-
-<table>
-  <thead>
-    <tr>
-      <th style="text-align: left">Operator syntax</th>
-      <th style="text-align: left">Description</th>
-    </tr>
-  </thead>
-  <tbody>
-    <tr>
-      <td style="text-align: left">value1 = value2</td>
-      <td style="text-align: left">Equals</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">value1 &lt;&gt; value2</td>
-      <td style="text-align: left">Not equal</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">value1 != value2</td>
-      <td style="text-align: left">Not equal (only available at some 
conformance levels)</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">value1 &gt; value2</td>
-      <td style="text-align: left">Greater than</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">value1 &gt;= value2</td>
-      <td style="text-align: left">Greater than or equal</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">value1 &lt; value2</td>
-      <td style="text-align: left">Less than</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">value1 &lt;= value2</td>
-      <td style="text-align: left">Less than or equal</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">value IS NULL</td>
-      <td style="text-align: left">Whether <em>value</em> is null</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">value IS NOT NULL</td>
-      <td style="text-align: left">Whether <em>value</em> is not null</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">value1 IS DISTINCT FROM value2</td>
-      <td style="text-align: left">Whether two values are not equal, treating 
null values as the same</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">value1 IS NOT DISTINCT FROM value2</td>
-      <td style="text-align: left">Whether two values are equal, treating null 
values as the same</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">value1 BETWEEN value2 AND value3</td>
-      <td style="text-align: left">Whether <em>value1</em> is greater than or 
equal to <em>value2</em> and less than or equal to <em>value3</em></td>
-    </tr>
-    <tr>
-      <td style="text-align: left">value1 NOT BETWEEN value2 AND value3</td>
-      <td style="text-align: left">Whether <em>value1</em> is less than 
<em>value2</em> or greater than <em>value3</em></td>
-    </tr>
-    <tr>
-      <td style="text-align: left">string1 LIKE string2 [ ESCAPE string3 ]</td>
-      <td style="text-align: left">Whether <em>string1</em> matches pattern 
<em>string2</em></td>
-    </tr>
-    <tr>
-      <td style="text-align: left">string1 NOT LIKE string2 [ ESCAPE string3 
]</td>
-      <td style="text-align: left">Whether <em>string1</em> does not match 
pattern <em>string2</em></td>
-    </tr>
-    <tr>
-      <td style="text-align: left">string1 SIMILAR TO string2 [ ESCAPE string3 
]</td>
-      <td style="text-align: left">Whether <em>string1</em> matches regular 
expression <em>string2</em></td>
-    </tr>
-    <tr>
-      <td style="text-align: left">string1 NOT SIMILAR TO string2 [ ESCAPE 
string3 ]</td>
-      <td style="text-align: left">Whether <em>string1</em> does not match 
regular expression <em>string2</em></td>
-    </tr>
-    <tr>
-      <td style="text-align: left">value IN (value [, value]*)</td>
-      <td style="text-align: left">Whether <em>value</em> is equal to a value 
in a list</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">value NOT IN (value [, value]*)</td>
-      <td style="text-align: left">Whether <em>value</em> is not equal to 
every value in a list</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">value IN (sub-query)</td>
-      <td style="text-align: left">Whether <em>value</em> is equal to a row 
returned by <em>sub-query</em></td>
-    </tr>
-    <tr>
-      <td style="text-align: left">value NOT IN (sub-query)</td>
-      <td style="text-align: left">Whether <em>value</em> is not equal to 
every row returned by <em>sub-query</em></td>
-    </tr>
-    <tr>
-      <td style="text-align: left">value comparison SOME (sub-query)</td>
-      <td style="text-align: left">Whether <em>value</em> <em>comparison</em> 
at least one row returned by <em>sub-query</em></td>
-    </tr>
-    <tr>
-      <td style="text-align: left">value comparison ANY (sub-query)</td>
-      <td style="text-align: left">Synonym for SOME</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">value comparison ALL (sub-query)</td>
-      <td style="text-align: left">Whether <em>value</em> <em>comparison</em> 
every row returned by <em>sub-query</em></td>
-    </tr>
-    <tr>
-      <td style="text-align: left">EXISTS (sub-query)</td>
-      <td style="text-align: left">Whether <em>sub-query</em> returns at least 
one row</td>
-    </tr>
-  </tbody>
-</table>
-
-<figure class="highlight"><pre><code class="language-sql" 
data-lang="sql"><span class="n">comp</span><span class="p">:</span>
-      <span class="o">=</span>
-  <span class="o">|</span>   <span class="o">&lt;&gt;</span>
-  <span class="o">|</span>   <span class="o">&gt;</span>
-  <span class="o">|</span>   <span class="o">&gt;=</span>
-  <span class="o">|</span>   <span class="o">&lt;</span>
-  <span class="o">|</span>   <span class="o">&lt;=</span></code></pre></figure>
-
-<h3 id="logical-operators">Logical operators</h3>
-
-<table>
-  <thead>
-    <tr>
-      <th style="text-align: left">Operator syntax</th>
-      <th style="text-align: left">Description</th>
-    </tr>
-  </thead>
-  <tbody>
-    <tr>
-      <td style="text-align: left">boolean1 OR boolean2</td>
-      <td style="text-align: left">Whether <em>boolean1</em> is TRUE or 
<em>boolean2</em> is TRUE</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">boolean1 AND boolean2</td>
-      <td style="text-align: left">Whether <em>boolean1</em> and 
<em>boolean2</em> are both TRUE</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">NOT boolean</td>
-      <td style="text-align: left">Whether <em>boolean</em> is not TRUE; 
returns UNKNOWN if <em>boolean</em> is UNKNOWN</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">boolean IS FALSE</td>
-      <td style="text-align: left">Whether <em>boolean</em> is FALSE; returns 
FALSE if <em>boolean</em> is UNKNOWN</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">boolean IS NOT FALSE</td>
-      <td style="text-align: left">Whether <em>boolean</em> is not FALSE; 
returns TRUE if <em>boolean</em> is UNKNOWN</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">boolean IS TRUE</td>
-      <td style="text-align: left">Whether <em>boolean</em> is TRUE; returns 
FALSE if <em>boolean</em> is UNKNOWN</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">boolean IS NOT TRUE</td>
-      <td style="text-align: left">Whether <em>boolean</em> is not TRUE; 
returns TRUE if <em>boolean</em> is UNKNOWN</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">boolean IS UNKNOWN</td>
-      <td style="text-align: left">Whether <em>boolean</em> is UNKNOWN</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">boolean IS NOT UNKNOWN</td>
-      <td style="text-align: left">Whether <em>boolean</em> is not UNKNOWN</td>
-    </tr>
-  </tbody>
-</table>
-
-<h3 id="arithmetic-operators-and-functions">Arithmetic operators and 
functions</h3>
-
-<table>
-  <thead>
-    <tr>
-      <th style="text-align: left">Operator syntax</th>
-      <th style="text-align: left">Description</th>
-    </tr>
-  </thead>
-  <tbody>
-    <tr>
-      <td style="text-align: left">+ numeric</td>
-      <td style="text-align: left">Returns <em>numeric</em></td>
-    </tr>
-    <tr>
-      <td style="text-align: left">- numeric</td>
-      <td style="text-align: left">Returns negative <em>numeric</em></td>
-    </tr>
-    <tr>
-      <td style="text-align: left">numeric1 + numeric2</td>
-      <td style="text-align: left">Returns <em>numeric1</em> plus 
<em>numeric2</em></td>
-    </tr>
-    <tr>
-      <td style="text-align: left">numeric1 - numeric2</td>
-      <td style="text-align: left">Returns <em>numeric1</em> minus 
<em>numeric2</em></td>
-    </tr>
-    <tr>
-      <td style="text-align: left">numeric1 * numeric2</td>
-      <td style="text-align: left">Returns <em>numeric1</em> multiplied by 
<em>numeric2</em></td>
-    </tr>
-    <tr>
-      <td style="text-align: left">numeric1 / numeric2</td>
-      <td style="text-align: left">Returns <em>numeric1</em> divided by 
<em>numeric2</em></td>
-    </tr>
-    <tr>
-      <td style="text-align: left">numeric1 % numeric2</td>
-      <td style="text-align: left">As <em>MOD(numeric1, numeric2)</em> (only 
in certain <a 
href="/apidocs/org/apache/calcite/sql/validate/SqlConformance.html#isPercentRemainderAllowed--">conformance
 levels</a>)</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">POWER(numeric1, numeric2)</td>
-      <td style="text-align: left">Returns <em>numeric1</em> raised to the 
power of <em>numeric2</em></td>
-    </tr>
-    <tr>
-      <td style="text-align: left">ABS(numeric)</td>
-      <td style="text-align: left">Returns the absolute value of 
<em>numeric</em></td>
-    </tr>
-    <tr>
-      <td style="text-align: left">MOD(numeric1, numeric2)</td>
-      <td style="text-align: left">Returns the remainder (modulus) of 
<em>numeric1</em> divided by <em>numeric2</em>. The result is negative only if 
<em>numeric1</em> is negative</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">SQRT(numeric)</td>
-      <td style="text-align: left">Returns the square root of 
<em>numeric</em></td>
-    </tr>
-    <tr>
-      <td style="text-align: left">LN(numeric)</td>
-      <td style="text-align: left">Returns the natural logarithm (base 
<em>e</em>) of <em>numeric</em></td>
-    </tr>
-    <tr>
-      <td style="text-align: left">LOG10(numeric)</td>
-      <td style="text-align: left">Returns the base 10 logarithm of 
<em>numeric</em></td>
-    </tr>
-    <tr>
-      <td style="text-align: left">EXP(numeric)</td>
-      <td style="text-align: left">Returns <em>e</em> raised to the power of 
<em>numeric</em></td>
-    </tr>
-    <tr>
-      <td style="text-align: left">CEIL(numeric)</td>
-      <td style="text-align: left">Rounds <em>numeric</em> up, returning the 
smallest integer that is greater than or equal to <em>numeric</em></td>
-    </tr>
-    <tr>
-      <td style="text-align: left">FLOOR(numeric)</td>
-      <td style="text-align: left">Rounds <em>numeric</em> down, returning the 
largest integer that is less than or equal to <em>numeric</em></td>
-    </tr>
-    <tr>
-      <td style="text-align: left">RAND([seed])</td>
-      <td style="text-align: left">Generates a random double between 0 and 1 
inclusive, optionally initializing the random number generator with 
<em>seed</em></td>
-    </tr>
-    <tr>
-      <td style="text-align: left">RAND_INTEGER([seed, ] numeric)</td>
-      <td style="text-align: left">Generates a random integer between 0 and 
<em>numeric</em> - 1 inclusive, optionally initializing the random number 
generator with <em>seed</em></td>
-    </tr>
-    <tr>
-      <td style="text-align: left">ACOS(numeric)</td>
-      <td style="text-align: left">Returns the arc cosine of 
<em>numeric</em></td>
-    </tr>
-    <tr>
-      <td style="text-align: left">ASIN(numeric)</td>
-      <td style="text-align: left">Returns the arc sine of 
<em>numeric</em></td>
-    </tr>
-    <tr>
-      <td style="text-align: left">ATAN(numeric)</td>
-      <td style="text-align: left">Returns the arc tangent of 
<em>numeric</em></td>
-    </tr>
-    <tr>
-      <td style="text-align: left">ATAN2(numeric, numeric)</td>
-      <td style="text-align: left">Returns the arc tangent of the 
<em>numeric</em> coordinates</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">COS(numeric)</td>
-      <td style="text-align: left">Returns the cosine of <em>numeric</em></td>
-    </tr>
-    <tr>
-      <td style="text-align: left">COT(numeric)</td>
-      <td style="text-align: left">Returns the cotangent of 
<em>numeric</em></td>
-    </tr>
-    <tr>
-      <td style="text-align: left">DEGREES(numeric)</td>
-      <td style="text-align: left">Converts <em>numeric</em> from radians to 
degrees</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">PI()</td>
-      <td style="text-align: left">Returns a value that is closer than any 
other value to <em>pi</em></td>
-    </tr>
-    <tr>
-      <td style="text-align: left">RADIANS(numeric)</td>
-      <td style="text-align: left">Converts <em>numeric</em> from degrees to 
radians</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">ROUND(numeric1 [, numeric2])</td>
-      <td style="text-align: left">Rounds <em>numeric1</em> to optionally 
<em>numeric2</em> (if not specified 0) places right to the decimal point</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">SIGN(numeric)</td>
-      <td style="text-align: left">Returns the signum of <em>numeric</em></td>
-    </tr>
-    <tr>
-      <td style="text-align: left">SIN(numeric)</td>
-      <td style="text-align: left">Returns the sine of <em>numeric</em></td>
-    </tr>
-    <tr>
-      <td style="text-align: left">TAN(numeric)</td>
-      <td style="text-align: left">Returns the tangent of <em>numeric</em></td>
-    </tr>
-    <tr>
-      <td style="text-align: left">TRUNCATE(numeric1 [, numeric2])</td>
-      <td style="text-align: left">Truncates <em>numeric1</em> to optionally 
<em>numeric2</em> (if not specified 0) places right to the decimal point</td>
-    </tr>
-  </tbody>
-</table>
-
-<h3 id="character-string-operators-and-functions">Character string operators 
and functions</h3>
-
-<table>
-  <thead>
-    <tr>
-      <th style="text-align: left">Operator syntax</th>
-      <th style="text-align: left">Description</th>
-    </tr>
-  </thead>
-  <tbody>
-    <tr>
-      <td style="text-align: left">string || string</td>
-      <td style="text-align: left">Concatenates two character strings</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">CHAR_LENGTH(string)</td>
-      <td style="text-align: left">Returns the number of characters in a 
character string</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">CHARACTER_LENGTH(string)</td>
-      <td style="text-align: left">As CHAR_LENGTH(<em>string</em>)</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">UPPER(string)</td>
-      <td style="text-align: left">Returns a character string converted to 
upper case</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">LOWER(string)</td>
-      <td style="text-align: left">Returns a character string converted to 
lower case</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">POSITION(string1 IN string2)</td>
-      <td style="text-align: left">Returns the position of the first 
occurrence of <em>string1</em> in <em>string2</em></td>
-    </tr>
-    <tr>
-      <td style="text-align: left">POSITION(string1 IN string2 FROM 
integer)</td>
-      <td style="text-align: left">Returns the position of the first 
occurrence of <em>string1</em> in <em>string2</em> starting at a given point 
(not standard SQL)</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">TRIM( { BOTH | LEADING | TRAILING } string1 
FROM string2)</td>
-      <td style="text-align: left">Removes the longest string containing only 
the characters in <em>string1</em> from the start/end/both ends of 
<em>string1</em></td>
-    </tr>
-    <tr>
-      <td style="text-align: left">OVERLAY(string1 PLACING string2 FROM 
integer [ FOR integer2 ])</td>
-      <td style="text-align: left">Replaces a substring of <em>string1</em> 
with <em>string2</em></td>
-    </tr>
-    <tr>
-      <td style="text-align: left">SUBSTRING(string FROM integer)</td>
-      <td style="text-align: left">Returns a substring of a character string 
starting at a given point</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">SUBSTRING(string FROM integer FOR 
integer)</td>
-      <td style="text-align: left">Returns a substring of a character string 
starting at a given point with a given length</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">INITCAP(string)</td>
-      <td style="text-align: left">Returns <em>string</em> with the first 
letter of each word converter to upper case and the rest to lower case. Words 
are sequences of alphanumeric characters separated by non-alphanumeric 
characters.</td>
-    </tr>
-  </tbody>
-</table>
-
-<p>Not implemented:</p>
-
-<ul>
-  <li>SUBSTRING(string FROM regexp FOR regexp)</li>
-</ul>
+Note:
 
-<h3 id="binary-string-operators-and-functions">Binary string operators and 
functions</h3>
+* DATE, TIME and TIMESTAMP have no time zone. There is not even an implicit
+  time zone, such as UTC (as in Java) or the local time zone. It is left to
+  the user or application to supply a time zone.
+
+### Non-scalar types
+
+| Type     | Description
+|:-------- |:-----------------------------------------------------------
+| ANY      | A value of an unknown type
+| ROW      | Row with 1 or more columns
+| MAP      | Collection of keys mapped to values
+| MULTISET | Unordered collection that may contain duplicates
+| ARRAY    | Ordered, contiguous collection that may contain duplicates
+| CURSOR   | Cursor over the result of executing a query
+
+## Operators and functions
+
+### Operator precedence
+
+The operator precedence and associativity, highest to lowest.
+
+| Operator                                          | Associativity
+|:------------------------------------------------- |:-------------
+| .                                                 | left
+| [ ] (array element)                               | left
+| + - (unary plus, minus)                           | right
+| * /                                               | left
+| + -                                               | left
+| BETWEEN, IN, LIKE, SIMILAR, OVERLAPS, CONTAINS etc. | -
+| < > = <= >= <> !=                                 | left
+| IS NULL, IS FALSE, IS NOT TRUE etc.               | -
+| NOT                                               | right
+| AND                                               | left
+| OR                                                | left
+
+### Comparison operators
+
+| Operator syntax                                   | Description
+|:------------------------------------------------- |:-----------
+| value1 = value2                                   | Equals
+| value1 <> value2                                  | Not equal
+| value1 != value2                                  | Not equal (only 
available at some conformance levels)
+| value1 > value2                                   | Greater than
+| value1 >= value2                                  | Greater than or equal
+| value1 < value2                                   | Less than
+| value1 <= value2                                  | Less than or equal
+| value IS NULL                                     | Whether *value* is null
+| value IS NOT NULL                                 | Whether *value* is not 
null
+| value1 IS DISTINCT FROM value2                    | Whether two values are 
not equal, treating null values as the same
+| value1 IS NOT DISTINCT FROM value2                | Whether two values are 
equal, treating null values as the same
+| value1 BETWEEN value2 AND value3                  | Whether *value1* is 
greater than or equal to *value2* and less than or equal to *value3*
+| value1 NOT BETWEEN value2 AND value3              | Whether *value1* is less 
than *value2* or greater than *value3*
+| string1 LIKE string2 [ ESCAPE string3 ]           | Whether *string1* 
matches pattern *string2*
+| string1 NOT LIKE string2 [ ESCAPE string3 ]       | Whether *string1* does 
not match pattern *string2*
+| string1 SIMILAR TO string2 [ ESCAPE string3 ]     | Whether *string1* 
matches regular expression *string2*
+| string1 NOT SIMILAR TO string2 [ ESCAPE string3 ] | Whether *string1* does 
not match regular expression *string2*
+| value IN (value [, value]*)                       | Whether *value* is equal 
to a value in a list
+| value NOT IN (value [, value]*)                   | Whether *value* is not 
equal to every value in a list
+| value IN (sub-query)                              | Whether *value* is equal 
to a row returned by *sub-query*
+| value NOT IN (sub-query)                          | Whether *value* is not 
equal to every row returned by *sub-query*
+| EXISTS (sub-query)                                | Whether *sub-query* 
returns at least one row
+
+### Logical operators
+
+| Operator syntax        | Description
+|:---------------------- |:-----------
+| boolean1 OR boolean2   | Whether *boolean1* is TRUE or *boolean2* is TRUE
+| boolean1 AND boolean2  | Whether *boolean1* and *boolean2* are both TRUE
+| NOT boolean            | Whether *boolean* is not TRUE; returns UNKNOWN if 
*boolean* is UNKNOWN
+| boolean IS FALSE       | Whether *boolean* is FALSE; returns FALSE if 
*boolean* is UNKNOWN
+| boolean IS NOT FALSE   | Whether *boolean* is not FALSE; returns TRUE if 
*boolean* is UNKNOWN
+| boolean IS TRUE        | Whether *boolean* is TRUE; returns FALSE if 
*boolean* is UNKNOWN
+| boolean IS NOT TRUE    | Whether *boolean* is not TRUE; returns TRUE if 
*boolean* is UNKNOWN
+| boolean IS UNKNOWN     | Whether *boolean* is UNKNOWN
+| boolean IS NOT UNKNOWN | Whether *boolean* is not UNKNOWN
+
+### Arithmetic operators and functions
+
+| Operator syntax           | Description
+|:------------------------- |:-----------
+| + numeric                 | Returns *numeric*
+|:- numeric                 | Returns negative *numeric*
+| numeric1 + numeric2       | Returns *numeric1* plus *numeric2*
+| numeric1 - numeric2       | Returns *numeric1* minus *numeric2*
+| numeric1 * numeric2       | Returns *numeric1* multiplied by *numeric2*
+| numeric1 / numeric2       | Returns *numeric1* divided by *numeric2*
+| POWER(numeric1, numeric2) | Returns *numeric1* raised to the power of 
*numeric2*
+| ABS(numeric)              | Returns the absolute value of *numeric*
+| MOD(numeric, numeric)     | Returns the remainder (modulus) of *numeric1* 
divided by *numeric2*. The result is negative only if *numeric1* is negative
+| SQRT(numeric)             | Returns the square root of *numeric*
+| LN(numeric)               | Returns the natural logarithm (base *e*) of 
*numeric*
+| LOG10(numeric)            | Returns the base 10 logarithm of *numeric*
+| EXP(numeric)              | Returns *e* raised to the power of *numeric*
+| CEIL(numeric)             | Rounds *numeric* up, returning the smallest 
integer that is greater than or equal to *numeric*
+| FLOOR(numeric)            | Rounds *numeric* down, returning the largest 
integer that is less than or equal to *numeric*
+| RAND([seed])              | Generates a random double between 0 and 1 
inclusive, optionally initializing the random number generator with *seed*
+| RAND_INTEGER([seed, ] numeric) | Generates a random integer between 0 and 
*numeric* - 1 inclusive, optionally initializing the random number generator 
with *seed*
+| ACOS(numeric)             | Returns the arc cosine of *numeric*
+| ASIN(numeric)             | Returns the arc sine of *numeric*
+| ATAN(numeric)             | Returns the arc tangent of *numeric*
+| ATAN2(numeric, numeric)   | Returns the arc tangent of the *numeric* 
coordinates
+| COS(numeric)              | Returns the cosine of *numeric*
+| COT(numeric)              | Returns the cotangent of *numeric*
+| DEGREES(numeric)          | Converts *numeric* from radians to degrees
+| PI()                      | Returns a value that is closer than any other 
value to *pi*
+| RADIANS(numeric)          | Converts *numeric* from degrees to radians
+| ROUND(numeric1, numeric2) | Rounds *numeric1* to *numeric2* places right to 
the decimal point
+| SIGN(numeric)             | Returns the signum of *numeric*
+| SIN(numeric)              | Returns the sine of *numeric*
+| TAN(numeric)              | Returns the tangent of *numeric*
+| TRUNCATE(numeric1, numeric2) | Truncates *numeric1* to *numeric2* places 
right to the decimal point
+
+### Character string operators and functions
+
+| Operator syntax            | Description
+|:-------------------------- |:-----------
+| string &#124;&#124; string | Concatenates two character strings
+| CHAR_LENGTH(string)        | Returns the number of characters in a character 
string
+| CHARACTER_LENGTH(string)   | As CHAR_LENGTH(*string*)
+| UPPER(string)              | Returns a character string converted to upper 
case
+| LOWER(string)              | Returns a character string converted to lower 
case
+| POSITION(string1 IN string2) | Returns the position of the first occurrence 
of *string1* in *string2*
+| POSITION(string1 IN string2 FROM integer) | Returns the position of the 
first occurrence of *string1* in *string2* starting at a given point (not 
standard SQL)
+| TRIM( { BOTH &#124; LEADING &#124; TRAILING } string1 FROM string2) | 
Removes the longest string containing only the characters in *string1* from the 
start/end/both ends of *string1*
+| OVERLAY(string1 PLACING string2 FROM integer [ FOR integer2 ]) | Replaces a 
substring of *string1* with *string2*
+| SUBSTRING(string FROM integer)  | Returns a substring of a character string 
starting at a given point
+| SUBSTRING(string FROM integer FOR integer) | Returns a substring of a 
character string starting at a given point with a given length
+| INITCAP(string)            | Returns *string* with the first letter of each 
word converter to upper case and the rest to lower case. Words are sequences of 
alphanumeric characters separated by non-alphanumeric characters.
+
+Not implemented:
+
+* SUBSTRING(string FROM regexp FOR regexp)
+
+### Binary string operators and functions
+
+| Operator syntax | Description
+|:--------------- |:-----------
+| binary &#124;&#124; binary | Concatenates two binary strings
+| POSITION(binary1 IN binary2) | Returns the position of the first occurrence 
of *binary1* in *binary2*
+| POSITION(binary1 IN binary2 FROM integer) | Returns the position of the 
first occurrence of *binary1* in *binary2* starting at a given point (not 
standard SQL)
+| OVERLAY(binary1 PLACING binary2 FROM integer [ FOR integer2 ]) | Replaces a 
substring of *binary1* with *binary2*
+| SUBSTRING(binary FROM integer) | Returns a substring of *binary* starting at 
a given point
+| SUBSTRING(binary FROM integer FOR integer) | Returns a substring of *binary* 
starting at a given point with a given length
+
+### Date/time functions
+
+| Operator syntax           | Description
+|:------------------------- |:-----------
+| LOCALTIME                 | Returns the current date and time in the session 
time zone in a value of datatype TIME
+| LOCALTIME(precision)      | Returns the current date and time in the session 
time zone in a value of datatype TIME, with *precision* digits of precision
+| LOCALTIMESTAMP            | Returns the current date and time in the session 
time zone in a value of datatype TIMESTAMP
+| LOCALTIMESTAMP(precision) | Returns the current date and time in the session 
time zone in a value of datatype TIMESTAMP, with *precision* digits of precision
+| CURRENT_TIME              | Returns the current time in the session time 
zone, in a value of datatype TIMESTAMP WITH TIME ZONE
+| CURRENT_DATE              | Returns the current date in the session time 
zone, in a value of datatype DATE
+| CURRENT_TIMESTAMP         | Returns the current date and time in the session 
time zone, in a value of datatype TIMESTAMP WITH TIME ZONE
+| EXTRACT(timeUnit FROM datetime) | Extracts and returns the value of a 
specified datetime field from a datetime value expression
+| FLOOR(datetime TO timeUnit) | Rounds *datetime* down to *timeUnit*
+| CEIL(datetime TO timeUnit) | Rounds *datetime* up to *timeUnit*
+| YEAR(date)                | Equivalent to `EXTRACT(YEAR FROM date)`. Returns 
an integer.
+| QUARTER(date)             | Equivalent to `EXTRACT(QUARTER FROM date)`. 
Returns an integer between 1 and 4.
+| MONTH(date)               | Equivalent to `EXTRACT(MONTH FROM date)`. 
Returns an integer between 1 and 12.
+| WEEK(date)                | Equivalent to `EXTRACT(WEEK FROM date)`. Returns 
an integer between 1 and 53.
+| DAYOFYEAR(date)           | Equivalent to `EXTRACT(DOY FROM date)`. Returns 
an integer between 1 and 366.
+| DAYOFMONTH(date)          | Equivalent to `EXTRACT(DAY FROM date)`. Returns 
an integer between 1 and 31.
+| DAYOFWEEK(date)           | Equivalent to `EXTRACT(DOW FROM date)`. Returns 
an integer between 1 and 7.
+| HOUR(date)                | Equivalent to `EXTRACT(HOUR FROM date)`. Returns 
an integer between 0 and 23.
+| MINUTE(date)              | Equivalent to `EXTRACT(MINUTE FROM date)`. 
Returns an integer between 0 and 59.
+| SECOND(date)              | Equivalent to `EXTRACT(SECOND FROM date)`. 
Returns an integer between 0 and 59.
+| TIMESTAMPADD(timeUnit, integer, datetime) | Returns *datetime* with an 
interval of (signed) *integer* *timeUnit*s added. Equivalent to `datetime + 
INTERVAL 'integer' timeUnit`
+| TIMESTAMPDIFF(timeUnit, datetime, datetime2) | Returns the (signed) number 
of *timeUnit* intervals between *datetime* and *datetime2*. Equivalent to 
`(datetime2 - datetime) timeUnit`
+
+Calls to niladic functions such as `CURRENT_DATE` do not accept parentheses in
+standard SQL. Calls with parentheses, such as `CURRENT_DATE()` are accepted in 
certain
+[conformance 
levels](/apidocs/org/apache/calcite/sql/validate/SqlConformance.html#allowNiladicParentheses--).
+
+Not implemented:
+
+* CEIL(interval)
+* FLOOR(interval)
+* \+ interval
+* \- interval
+* interval + interval
+* interval - interval
+* interval / interval
+
+### System functions
+
+| Operator syntax | Description
+|:--------------- |:-----------
+| USER            | Equivalent to CURRENT_USER
+| CURRENT_USER    | User name of current execution context
+| SESSION_USER    | Session user name
+| SYSTEM_USER     | Returns the name of the current data store user as 
identified by the operating system
+| CURRENT_PATH    | Returns a character string representing the current lookup 
scope for references to user-defined routines and types
+| CURRENT_ROLE    | Returns the current active role
+
+### Conditional functions and operators
+
+| Operator syntax | Description
+|:--------------- |:-----------
+| CASE value<br/>WHEN value1 [, value11 ]* THEN result1<br/>[ WHEN valueN [, 
valueN1 ]* THEN resultN ]*<br/>[ ELSE resultZ ]<br/> END | Simple case
+| CASE<br/>WHEN condition1 THEN result1<br/>[ WHEN conditionN THEN resultN 
]*<br/>[ ELSE resultZ ]<br/>END | Searched case
+| NULLIF(value, value) | Returns NULL if the values are the same.<br/><br/>For 
example, <code>NULLIF(5, 5)</code> returns NULL; <code>NULLIF(5, 0)</code> 
returns 5.
+| COALESCE(value, value [, value ]*) | Provides a value if the first value is 
null.<br/><br/>For example, <code>COALESCE(NULL, 5)</code> returns 5.
+
+### Type conversion
+
+| Operator syntax | Description
+|:--------------- | :----------
+| CAST(value AS type) | Converts a value to a given type.
+
+### Value constructors
+
+| Operator syntax | Description
+|:--------------- |:-----------
+| ROW (value [, value ]*)  | Creates a row from a list of values.
+| (value [, value ]* )     | Creates a row from a list of values.
+| map '[' key ']'     | Returns the element of a map with a particular key.
+| array '[' index ']' | Returns the element at a particular location in an 
array.
+| ARRAY '[' value [, value ]* ']' | Creates an array from a list of values.
+| MAP '[' key, value [, key, value ]* ']' | Creates a map from a list of 
key-value pairs.
+
+### Collection functions
+
+| Operator syntax | Description
+|:--------------- |:-----------
+| ELEMENT(value)  | Returns the sole element of a array or multiset; null if 
the collection is empty; throws if it has more than one element.
+| CARDINALITY(value) | Returns the number of elements in an array or multiset.
 
-<table>
-  <thead>
-    <tr>
-      <th style="text-align: left">Operator syntax</th>
-      <th style="text-align: left">Description</th>
-    </tr>
-  </thead>
-  <tbody>
-    <tr>
-      <td style="text-align: left">binary || binary</td>
-      <td style="text-align: left">Concatenates two binary strings</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">POSITION(binary1 IN binary2)</td>
-      <td style="text-align: left">Returns the position of the first 
occurrence of <em>binary1</em> in <em>binary2</em></td>
-    </tr>
-    <tr>
-      <td style="text-align: left">POSITION(binary1 IN binary2 FROM 
integer)</td>
-      <td style="text-align: left">Returns the position of the first 
occurrence of <em>binary1</em> in <em>binary2</em> starting at a given point 
(not standard SQL)</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">OVERLAY(binary1 PLACING binary2 FROM 
integer [ FOR integer2 ])</td>
-      <td style="text-align: left">Replaces a substring of <em>binary1</em> 
with <em>binary2</em></td>
-    </tr>
-    <tr>
-      <td style="text-align: left">SUBSTRING(binary FROM integer)</td>
-      <td style="text-align: left">Returns a substring of <em>binary</em> 
starting at a given point</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">SUBSTRING(binary FROM integer FOR 
integer)</td>
-      <td style="text-align: left">Returns a substring of <em>binary</em> 
starting at a given point with a given length</td>
-    </tr>
-  </tbody>
-</table>
+See also: UNNEST relational operator converts a collection to a relation.
 
-<h3 id="datetime-functions">Date/time functions</h3>
-
-<table>
-  <thead>
-    <tr>
-      <th style="text-align: left">Operator syntax</th>
-      <th style="text-align: left">Description</th>
-    </tr>
-  </thead>
-  <tbody>
-    <tr>
-      <td style="text-align: left">LOCALTIME</td>
-      <td style="text-align: left">Returns the current date and time in the 
session time zone in a value of datatype TIME</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">LOCALTIME(precision)</td>
-      <td style="text-align: left">Returns the current date and time in the 
session time zone in a value of datatype TIME, with <em>precision</em> digits 
of precision</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">LOCALTIMESTAMP</td>
-      <td style="text-align: left">Returns the current date and time in the 
session time zone in a value of datatype TIMESTAMP</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">LOCALTIMESTAMP(precision)</td>
-      <td style="text-align: left">Returns the current date and time in the 
session time zone in a value of datatype TIMESTAMP, with <em>precision</em> 
digits of precision</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">CURRENT_TIME</td>
-      <td style="text-align: left">Returns the current time in the session 
time zone, in a value of datatype TIMESTAMP WITH TIME ZONE</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">CURRENT_DATE</td>
-      <td style="text-align: left">Returns the current date in the session 
time zone, in a value of datatype DATE</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">CURRENT_TIMESTAMP</td>
-      <td style="text-align: left">Returns the current date and time in the 
session time zone, in a value of datatype TIMESTAMP WITH TIME ZONE</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">EXTRACT(timeUnit FROM datetime)</td>
-      <td style="text-align: left">Extracts and returns the value of a 
specified datetime field from a datetime value expression</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">FLOOR(datetime TO timeUnit)</td>
-      <td style="text-align: left">Rounds <em>datetime</em> down to 
<em>timeUnit</em></td>
-    </tr>
-    <tr>
-      <td style="text-align: left">CEIL(datetime TO timeUnit)</td>
-      <td style="text-align: left">Rounds <em>datetime</em> up to 
<em>timeUnit</em></td>
-    </tr>
-    <tr>
-      <td style="text-align: left">YEAR(date)</td>
-      <td style="text-align: left">Equivalent to <code 
class="highlighter-rouge">EXTRACT(YEAR FROM date)</code>. Returns an 
integer.</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">QUARTER(date)</td>
-      <td style="text-align: left">Equivalent to <code 
class="highlighter-rouge">EXTRACT(QUARTER FROM date)</code>. Returns an integer 
between 1 and 4.</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">MONTH(date)</td>
-      <td style="text-align: left">Equivalent to <code 
class="highlighter-rouge">EXTRACT(MONTH FROM date)</code>. Returns an integer 
between 1 and 12.</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">WEEK(date)</td>
-      <td style="text-align: left">Equivalent to <code 
class="highlighter-rouge">EXTRACT(WEEK FROM date)</code>. Returns an integer 
between 1 and 53.</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">DAYOFYEAR(date)</td>
-      <td style="text-align: left">Equivalent to <code 
class="highlighter-rouge">EXTRACT(DOY FROM date)</code>. Returns an integer 
between 1 and 366.</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">DAYOFMONTH(date)</td>
-      <td style="text-align: left">Equivalent to <code 
class="highlighter-rouge">EXTRACT(DAY FROM date)</code>. Returns an integer 
between 1 and 31.</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">DAYOFWEEK(date)</td>
-      <td style="text-align: left">Equivalent to <code 
class="highlighter-rouge">EXTRACT(DOW FROM date)</code>. Returns an integer 
between 1 and 7.</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">HOUR(date)</td>
-      <td style="text-align: left">Equivalent to <code 
class="highlighter-rouge">EXTRACT(HOUR FROM date)</code>. Returns an integer 
between 0 and 23.</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">MINUTE(date)</td>
-      <td style="text-align: left">Equivalent to <code 
class="highlighter-rouge">EXTRACT(MINUTE FROM date)</code>. Returns an integer 
between 0 and 59.</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">SECOND(date)</td>
-      <td style="text-align: left">Equivalent to <code 
class="highlighter-rouge">EXTRACT(SECOND FROM date)</code>. Returns an integer 
between 0 and 59.</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">TIMESTAMPADD(timeUnit, integer, 
datetime)</td>
-      <td style="text-align: left">Returns <em>datetime</em> with an interval 
of (signed) <em>integer</em> <em>timeUnit</em>s added. Equivalent to <code 
class="highlighter-rouge">datetime + INTERVAL 'integer' timeUnit</code></td>
-    </tr>
-    <tr>
-      <td style="text-align: left">TIMESTAMPDIFF(timeUnit, datetime, 
datetime2)</td>
-      <td style="text-align: left">Returns the (signed) number of 
<em>timeUnit</em> intervals between <em>datetime</em> and <em>datetime2</em>. 
Equivalent to <code class="highlighter-rouge">(datetime2 - datetime) 
timeUnit</code></td>
-    </tr>
-  </tbody>
-</table>
-
-<p>Calls to niladic functions such as <code 
class="highlighter-rouge">CURRENT_DATE</code> do not accept parentheses in
-standard SQL. Calls with parentheses, such as <code 
class="highlighter-rouge">CURRENT_DATE()</code> are accepted in certain
-<a 
href="/apidocs/org/apache/calcite/sql/validate/SqlConformance.html#allowNiladicParentheses--">conformance
 levels</a>.</p>
-
-<p>Not implemented:</p>
-
-<ul>
-  <li>CEIL(interval)</li>
-  <li>FLOOR(interval)</li>
-  <li>+ interval</li>
-  <li>- interval</li>
-  <li>interval + interval</li>
-  <li>interval - interval</li>
-  <li>interval / interval</li>
-</ul>
-
-<h3 id="system-functions">System functions</h3>
-
-<table>
-  <thead>
-    <tr>
-      <th style="text-align: left">Operator syntax</th>
-      <th style="text-align: left">Description</th>
-    </tr>
-  </thead>
-  <tbody>
-    <tr>
-      <td style="text-align: left">USER</td>
-      <td style="text-align: left">Equivalent to CURRENT_USER</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">CURRENT_USER</td>
-      <td style="text-align: left">User name of current execution context</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">SESSION_USER</td>
-      <td style="text-align: left">Session user name</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">SYSTEM_USER</td>
-      <td style="text-align: left">Returns the name of the current data store 
user as identified by the operating system</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">CURRENT_PATH</td>
-      <td style="text-align: left">Returns a character string representing the 
current lookup scope for references to user-defined routines and types</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">CURRENT_ROLE</td>
-      <td style="text-align: left">Returns the current active role</td>
-    </tr>
-  </tbody>
-</table>
-
-<h3 id="conditional-functions-and-operators">Conditional functions and 
operators</h3>
-
-<table>
-  <thead>
-    <tr>
-      <th style="text-align: left">Operator syntax</th>
-      <th style="text-align: left">Description</th>
-    </tr>
-  </thead>
-  <tbody>
-    <tr>
-      <td style="text-align: left">CASE value<br />WHEN value1 [, value11 ]* 
THEN result1<br />[ WHEN valueN [, valueN1 ]* THEN resultN ]*<br />[ ELSE 
resultZ ]<br /> END</td>
-      <td style="text-align: left">Simple case</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">CASE<br />WHEN condition1 THEN result1<br 
/>[ WHEN conditionN THEN resultN ]*<br />[ ELSE resultZ ]<br />END</td>
-      <td style="text-align: left">Searched case</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">NULLIF(value, value)</td>
-      <td style="text-align: left">Returns NULL if the values are the same.<br 
/><br />For example, <code>NULLIF(5, 5)</code> returns NULL; <code>NULLIF(5, 
0)</code> returns 5.</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">COALESCE(value, value [, value ]*)</td>
-      <td style="text-align: left">Provides a value if the first value is 
null.<br /><br />For example, <code>COALESCE(NULL, 5)</code> returns 5.</td>
-    </tr>
-  </tbody>
-</table>
-
-<h3 id="type-conversion">Type conversion</h3>
-
-<table>
-  <thead>
-    <tr>
-      <th style="text-align: left">Operator syntax</th>
-      <th style="text-align: left">Description</th>
-    </tr>
-  </thead>
-  <tbody>
-    <tr>
-      <td style="text-align: left">CAST(value AS type)</td>
-      <td style="text-align: left">Converts a value to a given type.</td>
-    </tr>
-  </tbody>
-</table>
-
-<h3 id="value-constructors">Value constructors</h3>
-
-<table>
-  <thead>
-    <tr>
-      <th style="text-align: left">Operator syntax</th>
-      <th style="text-align: left">Description</th>
-    </tr>
-  </thead>
-  <tbody>
-    <tr>
-      <td style="text-align: left">ROW (value [, value ]*)</td>
-      <td style="text-align: left">Creates a row from a list of values.</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">(value [, value ]* )</td>
-      <td style="text-align: left">Creates a row from a list of values.</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">map ‘[’ key ‘]’</td>
-      <td style="text-align: left">Returns the element of a map with a 
particular key.</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">array ‘[’ index ‘]’</td>
-      <td style="text-align: left">Returns the element at a particular 
location in an array.</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">ARRAY ‘[’ value [, value ]* ‘]’</td>
-      <td style="text-align: left">Creates an array from a list of values.</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">MAP ‘[’ key, value [, key, value ]* 
‘]’</td>
-      <td style="text-align: left">Creates a map from a list of key-value 
pairs.</td>
-    </tr>
-  </tbody>
-</table>
-
-<h3 id="collection-functions">Collection functions</h3>
-
-<table>
-  <thead>
-    <tr>
-      <th style="text-align: left">Operator syntax</th>
-      <th style="text-align: left">Description</th>
-    </tr>
-  </thead>
-  <tbody>
-    <tr>
-      <td style="text-align: left">ELEMENT(value)</td>
-      <td style="text-align: left">Returns the sole element of a array or 
multiset; null if the collection is empty; throws if it has more than one 
element.</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">CARDINALITY(value)</td>
-      <td style="text-align: left">Returns the number of elements in an array 
or multiset.</td>
-    </tr>
-  </tbody>
-</table>
-
-<p>See also: UNNEST relational operator converts a collection to a 
relation.</p>
-

[... 1701 lines stripped ...]

Reply via email to