You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by th...@apache.org on 2018/02/21 16:00:38 UTC

svn commit: r1824978 [2/4] - in /jackrabbit/site/live/oak/docs: ./ architecture/ coldstandby/ css/ features/ grammar/ nodestore/ nodestore/document/ nodestore/segment/ oak-mongo-js/ oak_api/ plugins/ query/ security/ security/accesscontrol/ security/au...

Added: jackrabbit/site/live/oak/docs/query/grammar-sql2-old.html
URL: http://svn.apache.org/viewvc/jackrabbit/site/live/oak/docs/query/grammar-sql2-old.html?rev=1824978&view=auto
==============================================================================
--- jackrabbit/site/live/oak/docs/query/grammar-sql2-old.html (added)
+++ jackrabbit/site/live/oak/docs/query/grammar-sql2-old.html Wed Feb 21 16:00:36 2018
@@ -0,0 +1,620 @@
+<!DOCTYPE html>
+<!--
+ | Generated by Apache Maven Doxia Site Renderer 1.7.4 at 2018-02-21 
+ | Rendered using Apache Maven Fluido Skin 1.6
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+  <head>
+    <meta charset="UTF-8" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+    <meta name="Date-Revision-yyyymmdd" content="20180221" />
+    <meta http-equiv="Content-Language" content="en" />
+    <title>Jackrabbit Oak &#x2013; Oak SQL-2 Query Grammar</title>
+    <link rel="stylesheet" href="../css/apache-maven-fluido-1.6.min.css" />
+    <link rel="stylesheet" href="../css/site.css" />
+    <link rel="stylesheet" href="../css/print.css" media="print" />
+      <script type="text/javascript" src="../js/apache-maven-fluido-1.6.min.js"></script>
+      </head>
+    <body class="topBarEnabled">
+                  <a href="https://github.com/apache/jackrabbit-oak">
+      <img style="position: absolute; top: 0; right: 0; border: 0; z-index: 10000;"
+        src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png"
+        alt="Fork me on GitHub">
+    </a>
+      <div id="topbar" class="navbar navbar-fixed-top ">
+      <div class="navbar-inner">
+        <div class="container-fluid">
+        <a data-target=".nav-collapse" data-toggle="collapse" class="btn btn-navbar">
+          <span class="icon-bar"></span>
+          <span class="icon-bar"></span>
+          <span class="icon-bar"></span>
+        </a>
+<a class="brand" href="../"  title="Oak logo"><img src="../oak_logo.png" alt="Oak logo" />
+</a>
+            <ul class="nav">
+        <li class="dropdown">
+        <a href="#" class="dropdown-toggle" data-toggle="dropdown">Overview <b class="caret"></b></a>
+        <ul class="dropdown-menu">
+            <li><a href="../index.html" title="Jackrabbit Oak">Jackrabbit Oak</a></li>
+            <li><a href="../license.html" title="License">License</a></li>
+            <li><a href="../downloads.html" title="Downloads">Downloads</a></li>
+            <li><a href="../articles.html" title="Articles">Articles</a></li>
+        </ul>
+      </li>
+        <li class="dropdown">
+        <a href="#" class="dropdown-toggle" data-toggle="dropdown">Concepts and Architecture <b class="caret"></b></a>
+        <ul class="dropdown-menu">
+            <li><a href="../architecture/overview.html" title="Overview">Overview</a></li>
+            <li><a href="../architecture/nodestate.html" title="The Node State Model">The Node State Model</a></li>
+        </ul>
+      </li>
+        <li class="dropdown">
+        <a href="#" class="dropdown-toggle" data-toggle="dropdown">Main APIs <b class="caret"></b></a>
+        <ul class="dropdown-menu">
+            <li><a href="http://www.day.com/specs/jcr/2.0/index.html" title="JCR API">JCR API</a></li>
+            <li><a href="../oak_api/overview.html" title="Oak API">Oak API</a></li>
+        </ul>
+      </li>
+        <li class="dropdown">
+        <a href="#" class="dropdown-toggle" data-toggle="dropdown">Features and Plugins <b class="caret"></b></a>
+        <ul class="dropdown-menu">
+            <li class="dropdown-submenu">
+<a href="../nodestore/overview.html" title="Node Storage">Node Storage</a>
+              <ul class="dropdown-menu">
+                  <li><a href="../nodestore/documentmk.html" title="Document NodeStore">Document NodeStore</a></li>
+                  <li><a href="../nodestore/segment/overview.html" title="Segment NodeStore">Segment NodeStore</a></li>
+                  <li><a href="../nodestore/compositens.html" title="Composite NodeStore">Composite NodeStore</a></li>
+              </ul>
+            </li>
+            <li><a href="../plugins/blobstore.html" title="Blob Storage">Blob Storage</a></li>
+            <li class="dropdown-submenu">
+<a href="../query/query.html" title="Query">Query</a>
+              <ul class="dropdown-menu">
+                  <li><a href="../query/query-engine.html" title="Query Engine">Query Engine</a></li>
+                  <li><a href="../query/grammar-xpath.html" title="XPath Grammar">XPath Grammar</a></li>
+                  <li><a href="../query/grammar-sql2.html" title="SQL-2 Grammar">SQL-2 Grammar</a></li>
+                  <li><a href="../query/query-troubleshooting.html" title="Troubleshooting">Troubleshooting</a></li>
+                  <li><a href="../query/indexing.html" title="Indexing">Indexing</a></li>
+                  <li><a href="../query/lucene.html" title="Lucene Index">Lucene Index</a></li>
+                  <li><a href="../query/property-index.html" title="Property Index">Property Index</a></li>
+                  <li><a href="../query/solr.html" title="Solr Index">Solr Index</a></li>
+              </ul>
+            </li>
+            <li><a href="../security/overview.html" title="Security">Security</a></li>
+            <li><a href="../features/atomic-counter.html" title="Atomic Counter">Atomic Counter</a></li>
+            <li><a href="../features/observation.html" title="Observation">Observation</a></li>
+        </ul>
+      </li>
+        <li class="dropdown">
+        <a href="#" class="dropdown-toggle" data-toggle="dropdown">Using Oak <b class="caret"></b></a>
+        <ul class="dropdown-menu">
+            <li><a href="../use_getting_started.html" title="Getting Started">Getting Started</a></li>
+            <li><a href="../construct.html" title="Repository Construction">Repository Construction</a></li>
+            <li><a href="../osgi_config.html" title="Configuring Oak">Configuring Oak</a></li>
+            <li><a href="../command_line.html" title="Command Line Tools">Command Line Tools</a></li>
+            <li><a href="../migration.html" title="Migration">Migration</a></li>
+            <li><a href="../differences.html" title="Differences to Jackrabbit 2">Differences to Jackrabbit 2</a></li>
+            <li><a href="../known_issues.html" title="Known Issues">Known Issues</a></li>
+            <li><a href="../constraints.html" title="Constraints">Constraints</a></li>
+            <li><a href="../dos_and_donts.html" title="Dos and Don'ts">Dos and Don'ts</a></li>
+            <li><a href="../coldstandby/coldstandby.html" title="Cold Standby">Cold Standby</a></li>
+            <li><a href="../FAQ.html" title="FAQ">FAQ</a></li>
+        </ul>
+      </li>
+        <li class="dropdown">
+        <a href="#" class="dropdown-toggle" data-toggle="dropdown">Developing Oak <b class="caret"></b></a>
+        <ul class="dropdown-menu">
+            <li><a href="../dev_getting_started.html" title="Getting Started">Getting Started</a></li>
+            <li><a href="../participating.html" title="Participating">Participating</a></li>
+            <li><a href="../developing-with-git.html" title="Developing with Git">Developing with Git</a></li>
+            <li><a href="../diagnostic-builds.html" title="Cutting diagnostic builds">Cutting diagnostic builds</a></li>
+            <li><a href="../branching.html" title="Branching off a new stable">Branching off a new stable</a></li>
+            <li><a href="../attribution.html" title="Attribution">Attribution</a></li>
+            <li><a href="../release-schedule.html" title="Release Schedule">Release Schedule</a></li>
+        </ul>
+      </li>
+        <li class="dropdown">
+        <a href="#" class="dropdown-toggle" data-toggle="dropdown">Links <b class="caret"></b></a>
+        <ul class="dropdown-menu">
+            <li><a href="http://jackrabbit.apache.org/oak" title="Apache Jackrabbit Oak">Apache Jackrabbit Oak</a></li>
+            <li><a href="http://jackrabbit.apache.org/" title="Apache Jackrabbit">Apache Jackrabbit</a></li>
+        </ul>
+      </li>
+              </ul>
+            </div>
+        </div>
+      </div>
+    </div>
+    <div class="container-fluid">
+      <div id="banner">
+        <div class="pull-left"><div id="bannerLeft"><h2>Oak Documentation</h2>
+</div>
+</div>
+        <div class="pull-right"></div>
+        <div class="clear"><hr/></div>
+      </div>
+
+      <div id="breadcrumbs">
+        <ul class="breadcrumb">
+        <li id="publishDate">Last Published: 2018-02-21<span class="divider">|</span>
+</li>
+          <li id="projectVersion">Version: 1.10-SNAPSHOT</li>
+        </ul>
+      </div>
+      <div class="row-fluid">
+        <div id="leftColumn" class="span2">
+          <div class="well sidebar-nav">
+<ul class="nav nav-list">
+          <li class="nav-header">Overview</li>
+    <li><a href="../index.html" title="Jackrabbit Oak"><span class="none"></span>Jackrabbit Oak</a>  </li>
+    <li><a href="../license.html" title="License"><span class="none"></span>License</a>  </li>
+    <li><a href="../downloads.html" title="Downloads"><span class="none"></span>Downloads</a>  </li>
+    <li><a href="../articles.html" title="Articles"><span class="none"></span>Articles</a>  </li>
+          <li class="nav-header">Concepts and Architecture</li>
+    <li><a href="../architecture/overview.html" title="Overview"><span class="none"></span>Overview</a>  </li>
+    <li><a href="../architecture/nodestate.html" title="The Node State Model"><span class="none"></span>The Node State Model</a>  </li>
+          <li class="nav-header">Main APIs</li>
+    <li><a href="http://www.day.com/specs/jcr/2.0/index.html" class="externalLink" title="JCR API"><span class="none"></span>JCR API</a>  </li>
+    <li><a href="../oak_api/overview.html" title="Oak API"><span class="none"></span>Oak API</a>  </li>
+          <li class="nav-header">Features and Plugins</li>
+    <li><a href="../nodestore/overview.html" title="Node Storage"><span class="icon-chevron-down"></span>Node Storage</a>
+      <ul class="nav nav-list">
+    <li><a href="../nodestore/documentmk.html" title="Document NodeStore"><span class="icon-chevron-down"></span>Document NodeStore</a>
+      <ul class="nav nav-list">
+    <li><a href="../nodestore/document/node-bundling.html" title="Node Bundling"><span class="none"></span>Node Bundling</a>  </li>
+    <li><a href="../nodestore/document/secondary-store.html" title="Secondary Store"><span class="none"></span>Secondary Store</a>  </li>
+    <li><a href="../nodestore/persistent-cache.html" title="Persistent Cache"><span class="none"></span>Persistent Cache</a>  </li>
+    <li><a href="../clustering.html" title="Clustering"><span class="none"></span>Clustering</a>  </li>
+      </ul>
+  </li>
+    <li><a href="../nodestore/segment/overview.html" title="Segment NodeStore"><span class="none"></span>Segment NodeStore</a>  </li>
+    <li><a href="../nodestore/compositens.html" title="Composite NodeStore"><span class="none"></span>Composite NodeStore</a>  </li>
+      </ul>
+  </li>
+    <li><a href="../plugins/blobstore.html" title="Blob Storage"><span class="none"></span>Blob Storage</a>  </li>
+    <li><a href="../query/query.html" title="Query"><span class="icon-chevron-down"></span>Query</a>
+      <ul class="nav nav-list">
+    <li><a href="../query/query-engine.html" title="Query Engine"><span class="none"></span>Query Engine</a>  </li>
+    <li><a href="../query/grammar-xpath.html" title="XPath Grammar"><span class="none"></span>XPath Grammar</a>  </li>
+    <li><a href="../query/grammar-sql2.html" title="SQL-2 Grammar"><span class="none"></span>SQL-2 Grammar</a>  </li>
+    <li><a href="../query/query-troubleshooting.html" title="Troubleshooting"><span class="none"></span>Troubleshooting</a>  </li>
+    <li><a href="../query/indexing.html" title="Indexing"><span class="none"></span>Indexing</a>  </li>
+    <li><a href="../query/lucene.html" title="Lucene Index"><span class="none"></span>Lucene Index</a>  </li>
+    <li><a href="../query/property-index.html" title="Property Index"><span class="none"></span>Property Index</a>  </li>
+    <li><a href="../query/solr.html" title="Solr Index"><span class="none"></span>Solr Index</a>  </li>
+      </ul>
+  </li>
+    <li><a href="../security/overview.html" title="Security"><span class="none"></span>Security</a>  </li>
+    <li><a href="../features/atomic-counter.html" title="Atomic Counter"><span class="none"></span>Atomic Counter</a>  </li>
+    <li><a href="../features/observation.html" title="Observation"><span class="none"></span>Observation</a>  </li>
+          <li class="nav-header">Using Oak</li>
+    <li><a href="../use_getting_started.html" title="Getting Started"><span class="none"></span>Getting Started</a>  </li>
+    <li><a href="../construct.html" title="Repository Construction"><span class="none"></span>Repository Construction</a>  </li>
+    <li><a href="../osgi_config.html" title="Configuring Oak"><span class="none"></span>Configuring Oak</a>  </li>
+    <li><a href="../command_line.html" title="Command Line Tools"><span class="none"></span>Command Line Tools</a>  </li>
+    <li><a href="../migration.html" title="Migration"><span class="none"></span>Migration</a>  </li>
+    <li><a href="../differences.html" title="Differences to Jackrabbit 2"><span class="none"></span>Differences to Jackrabbit 2</a>  </li>
+    <li><a href="../known_issues.html" title="Known Issues"><span class="none"></span>Known Issues</a>  </li>
+    <li><a href="../constraints.html" title="Constraints"><span class="none"></span>Constraints</a>  </li>
+    <li><a href="../dos_and_donts.html" title="Dos and Don'ts"><span class="none"></span>Dos and Don'ts</a>  </li>
+    <li><a href="../coldstandby/coldstandby.html" title="Cold Standby"><span class="none"></span>Cold Standby</a>  </li>
+    <li><a href="../FAQ.html" title="FAQ"><span class="none"></span>FAQ</a>  </li>
+          <li class="nav-header">Developing Oak</li>
+    <li><a href="../dev_getting_started.html" title="Getting Started"><span class="none"></span>Getting Started</a>  </li>
+    <li><a href="../participating.html" title="Participating"><span class="none"></span>Participating</a>  </li>
+    <li><a href="../developing-with-git.html" title="Developing with Git"><span class="none"></span>Developing with Git</a>  </li>
+    <li><a href="../diagnostic-builds.html" title="Cutting diagnostic builds"><span class="none"></span>Cutting diagnostic builds</a>  </li>
+    <li><a href="../branching.html" title="Branching off a new stable"><span class="none"></span>Branching off a new stable</a>  </li>
+    <li><a href="../attribution.html" title="Attribution"><span class="none"></span>Attribution</a>  </li>
+    <li><a href="../release-schedule.html" title="Release Schedule"><span class="none"></span>Release Schedule</a>  </li>
+          <li class="nav-header">Links</li>
+    <li><a href="http://jackrabbit.apache.org/oak" class="externalLink" title="Apache Jackrabbit Oak"><span class="none"></span>Apache Jackrabbit Oak</a>  </li>
+    <li><a href="http://jackrabbit.apache.org/" class="externalLink" title="Apache Jackrabbit"><span class="none"></span>Apache Jackrabbit</a>  </li>
+  </ul>
+          <hr />
+          <div id="poweredBy">
+          <script type="text/javascript">asyncJs( 'https://apis.google.com/js/plusone.js' )</script>
+        <div class="g-plusone" data-href="http://jackrabbit.apache.org/oak/docs/" data-size="tall" ></div>
+                  <div class="clear"></div>
+              <div class="clear"></div>
+              <div class="clear"></div>
+              <div class="clear"></div>
+  <a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="../images/logos/maven-feather.png" /></a>
+              </div>
+          </div>
+        </div>
+        <div id="bodyColumn"  class="span10" >
+<!--
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+  --><div class="section">
+<h2><a name="Oak_SQL-2_Query_Grammar"></a>Oak SQL-2 Query Grammar</h2>
+
+<ul>
+  
+<li><a href="#query">Query</a></li>
+  
+<li><a href="#column">Column</a></li>
+  
+<li><a href="#selector">Selector</a></li>
+  
+<li><a href="#join">Join</a></li>
+  
+<li><a href="#constraint">Constraint</a></li>
+  
+<li><a href="#andCondition">And Condition</a></li>
+  
+<li><a href="#condition">Condition</a></li>
+  
+<li><a href="#comparison">Comparison</a></li>
+  
+<li><a href="#inComparison">In Comparison</a></li>
+  
+<li><a href="#staticOperand">Static Operand</a></li>
+  
+<li><a href="#ordering">Ordering</a></li>
+  
+<li><a href="#dynamicOperand">Dynamic Operand</a></li>
+  
+<li><a href="#type">Type</a></li>
+  
+<li><a href="#options">Options</a></li>
+  
+<li><a href="#explain">Explain</a></li>
+  
+<li><a href="#measure">Measure</a></li>
+</ul>
+<hr />
+
+<div class="section" id="query">
+<h3 id="query">Query</h3>
+
+<div class="section">
+<h4><a name="SELECT__DISTINCT_____column___...____FROM__selector__join_...____WHERE_constraint___UNION__ALLquery___ORDER_BY__ordering___..._____queryOptions_"></a>
+SELECT [ DISTINCT&#xa0;] { * | { <a href="#column">column</a> [ , ... ] } }
+<br /> FROM { <a href="#selector">selector</a> [ <a href="#join">join</a> ... ] }
+<br /> [ WHERE <a href="#constraint">constraint</a> ]
+<br /> [ UNION [ ALL&#xa0;]&#xa0;<a href="#query">query</a> ]
+<br /> [ ORDER BY { <a href="#ordering">ordering</a> [ , ... ] } ]
+<br /> [ <a href="#options">queryOptions</a> ]
+</h4>
+<p>All queries should have a path restriction (even if it&#x2019;s just, for example, &#x201c;/content&#x201d;), as this allows to shrink indexes.</p>
+<p>&#x201c;distinct&#x201d; ensures each row is only returned once.</p>
+<p>&#x201c;union&#x201d; combines the result of this query with the results of another query, where &#x201c;union all&#x201d; does not remove duplicates.</p>
+<p>&#x201c;order by&#x201d; may use an index. If there is no index for the given sort order, then the result is fully read in memory and sorted before returning the first row.</p>
+<p>Examples:</p>
+
+<div class="source">
+<div class="source"><pre class="prettyprint">select * from [sling:Folder] as a where [sling:resourceType] = 'x' and isdescendantnode(a, '/content')
+select [jcr:path] from [oak:QueryIndexDefinition] as a where [type] = 'lucene' and isdescendantnode(a, '/') order by [reindexCount] desc
+select [jcr:path], [jcr:score], * from [nt:base] as a where [type] = 'report' and isdescendantnode(a, '/etc') option(traversal fail)
+</pre></div></div>
+<hr />
+</div></div>
+<div class="section" id="column">
+<h3 id="column">Column</h3>
+
+<div class="section">
+<h4><a name="a__selectorName_.___propertyName_____EXCERPTselectorName__rep:spellcheck___AS_aliasName_"></a>
+{ [ selectorName . ] { propertyName | * }
+<br /> | EXCERPT([selectorName])
+<br /> | rep:spellcheck()
+<br /> } [ AS aliasName ]
+</h4>
+<p>It is recommended to enclose property names in square brackets.</p>
+<p>For the &#x201c;excerpt&#x201d; property, see <a href="query-engine.html#Excerpts_and_Highlighting">Excerpts and Highlighting</a>.</p>
+<p>Not listed above are &#x201c;special&#x201d; properties such as &#x201c;[jcr:path]&#x201d; (the path), &#x201c;[jcr:score]&#x201d; (the score), &#x201c;[rep:suggest()]&#x201d;.</p>
+<p>Examples:</p>
+
+<div class="source">
+<div class="source"><pre class="prettyprint">*
+[jcr:path]
+[jcr:score]
+a.*
+a.[sling:resourceType]
+</pre></div></div>
+<hr />
+</div></div>
+<div class="section" id="selector">
+<h3 id="selector">Selector</h3>
+
+<div class="section">
+<h4><a name="nodeTypeName__AS_selectorName_"></a>
+nodeTypeName [ AS selectorName ]
+</h4>
+<p>The nodetype name can be either a primary nodetype or a mixin nodetype. It is recommended to specify the nodetype name in square brackes.</p>
+<p>Examples:</p>
+
+<div class="source">
+<div class="source"><pre class="prettyprint">[sling:Folder] as a
+</pre></div></div>
+<hr />
+</div></div>
+<div class="section" id="join">
+<h3 id="join">Join</h3>
+
+<div class="section">
+<h4><a name="a_INNER___LEFT__RIGHT__OUTER__JOIN_rightSelector_ON__selectorName_._propertyName__joinSelectorName_._joinPropertyName____ISSAMENODE_selectorName__joinSelectorName___selectorPathName______ISCHILDNODE_childSelectorName__parentSelectorName_____ISDESCENDANTNODE_descendantSelectorName__ancestorSelectorName__"></a>
+{ INNER | { LEFT | RIGHT } OUTER } JOIN <a href="#selector">rightSelector</a> ON
+<br /> { selectorName . propertyName = joinSelectorName . joinPropertyName }
+<br /> | { ISSAMENODE( selectorName , joinSelectorName [ , selectorPathName ] ) }
+<br /> | { ISCHILDNODE( childSelectorName , parentSelectorName ) }
+<br /> | { ISDESCENDANTNODE( descendantSelectorName , ancestorSelectorName ) }
+</h4>
+<p>An &#x201c;inner join&#x201d; only returns entries if nodes are found on both the left and right selector. A &#x201c;left outer join&#x201d; will return entries that don&#x2019;t have matching nodes on the right selector. A &#x201c;right outer join&#x201d; will return entries that don&#x2019;t have matching nodes on the left selector. For outer joins, all the properties of the selector that doesn&#x2019;t have a matching node are null.</p>
+<p>Examples:</p>
+<p>All nodes below /oak:index that <i>don&#x2019;t</i> have a child node:</p>
+
+<div class="source">
+<div class="source"><pre class="prettyprint">select a.* from [oak:QueryIndexDefinition] as a 
+  left outer join [nt:base] as b on ischildnode(b, a)
+  where isdescendantnode(a, '/oak:index') 
+  and b.[jcr:primaryType] is null 
+  order by a.[jcr:path]
+</pre></div></div>
+<hr />
+</div></div>
+<div class="section" id="constraint">
+<h3 id="constraint">Constraint</h3>
+
+<div class="section">
+<h4><a name="andCondition___OR_andCondition__..._"></a>
+<a href="#andCondition">andCondition</a> [ { OR <a href="#andCondition">andCondition</a> } [...] ]
+</h4>
+<p>&#x201c;or&#x201d; conditions of the form &#x201c;[x]=1 or [x]=2&#x201d; are automatically converted to &#x201c;[x] in(1, 2)&#x201d;, and can use the same an index.</p>
+<p>&#x201c;or&#x201d; conditions of the form &#x201c;[x]=1 or [y]=2&#x201d; are more complicated. Oak will try two options: first, what is the expected cost to use a &#x201c;union&#x201d; query (one query with x=1, and a second query with y=2). If using &#x201c;union&#x201d; results in a lower estimated cost, then &#x201c;union&#x201d; is used. This can be the case, for example, if there are two distinct indexes, one on x, and another on y.</p>
+<hr />
+</div></div>
+<div class="section" id="andCondition">
+<h3 id="andCondition">And Condition</h3>
+
+<div class="section">
+<h4><a name="condition___AND_condition__..._"></a>
+<a href="#condition">condition</a> [ { AND <a href="#condition">condition</a> } [...] ]
+</h4>
+<p>A special case (not found in relational databases) is &#x201c;and&#x201d; conditions of the form &#x201c;[x]=1 and [x]=2&#x201d;. They will match nodes with multi-valued properties, where the property value contains both 1 and 2.</p>
+<hr />
+</div></div>
+<div class="section" id="condition">
+<h3 id="condition">Condition</h3>
+
+<div class="section">
+<h4><a name="comparison_inComparison__NOT_constraint___constraint____selectorName_.__propertyName_IS__NOT__NULL__CONTAINS____selectorName_.__propertyName____selectorName_._____staticOperand____ISSAMENODE__ISCHILDNODE__ISDESCENDANTNODE_____selectorName___pathString___SIMILAR___selectorName_.___propertyName_____staticOperand___NATIVE___selectorName___language__staticOperand___SPELLCHECK___selectorName___staticOperand___SUGGEST___selectorName___staticOperand_"></a>
+<a href="#comparison">comparison</a>
+<br /> <a href="#inComparison">inComparison</a>
+<br /> | NOT <a href="#constraint">constraint</a>
+<br /> | ( <a href="#constraint">constraint</a> )
+<br /> | [ selectorName . ] propertyName IS [ NOT ] NULL
+<br /> | CONTAINS( { { [ selectorName . ] propertyName } | { selectorName . * } } , staticOperand )
+<br /> | { ISSAMENODE | ISCHILDNODE | ISDESCENDANTNODE } (  [ selectorName , ] pathString )
+<br /> | SIMILAR ( [ selectorName . ] { propertyName | * } , staticOperand )
+<br /> | NATIVE ( [ selectorName , ] language , staticOperand )
+<br /> | SPELLCHECK ( [ selectorName , ] staticOperand )
+<br /> | SUGGEST ( [ selectorName , ] staticOperand )
+</h4>
+<p>&#x201c;not&#x201d; conditions can not typically use an index.</p>
+<p>&#x201c;contains&#x201d;: see <a href="query-engine.html#Full-Text_Queries">Full-Text Queries</a>.</p>
+<p>&#x201c;similar&#x201d;: see <a href="query-engine.html#Similarity_Queries">Similarity Queries</a>.</p>
+<p>&#x201c;native&#x201d;: see <a href="query-engine.html#Native_Queries">Native Queries</a>.</p>
+<p>&#x201c;spellcheck&#x201d;: see <a href="query-engine.html#Spellchecking">Spellchecking</a>.</p>
+<p>&#x201c;suggest&#x201d;: see <a href="query-engine.html#Suggestions">Suggestions</a>.</p>
+<p>Examples:</p>
+
+<div class="source">
+<div class="source"><pre class="prettyprint">select [jcr:path] from [nt:base] where similar(*, '/test/a') 
+select [jcr:path] from [nt:base] where native('solr', 'name:(Hello OR World)')
+select [rep:suggest()] from [nt:base] where suggest('in ') and issamenode('/')
+select [rep:spellcheck()] from [nt:base] as a where spellcheck('helo') and issamenode(a, '/')
+</pre></div></div>
+<hr />
+</div></div>
+<div class="section" id="comparison">
+<h3 id="comparison">Comparison</h3>
+
+<div class="section">
+<h4><a name="dynamicOperand______________LIKE__staticOperand"></a>
+<a href="#dynamicOperand">dynamicOperand</a> 
+{ = | &lt;&gt; | &lt; | &lt;= | &gt; | &gt;= | LIKE } 
+<a href="#staticOperand">staticOperand</a>
+</h4>
+<p>&#x201c;like&#x201d;: when comparing with LIKE, the wildcards characters are &#x2018;<i>&#x2018; (any one character) and &#x2019;%&#x2018; (any characters). An index is used, except if the operand starts with a wildcard. To search for the characters &#x2019;%&#x2018; and &#x2019;</i>&#x2019;, the characters need to be escaped using &#x2019;' (backslash).</p>
+<p>Comparison using &lt;, &gt;, &gt;=, and &lt;= can use an index if the property in the index is ordered.</p>
+<p>Examples:</p>
+
+<div class="source">
+<div class="source"><pre class="prettyprint">[name] like '%: 100 \%'
+</pre></div></div>
+<hr />
+</div></div>
+<div class="section" id="inComparison">
+<h3 id="inComparison">In Comparison</h3>
+
+<div class="section">
+<h4><a name="dynamicOperand_IN__staticOperand__..._"></a>
+<a href="#dynamicOperand">dynamicOperand</a> IN ( <a href="#staticOperand">staticOperand</a> [, ...] )
+</h4>
+<p>Examples:</p>
+
+<div class="source">
+<div class="source"><pre class="prettyprint">[status] in('active', 'inactive')
+</pre></div></div>
+<hr />
+</div></div>
+<div class="section" id="staticOperand">
+<h3 id="staticOperand">Static Operand</h3>
+
+<div class="section">
+<h4><a name="literal___bindVariableName__CAST__literal_AS_type_"></a>
+literal
+<br /> | $ bindVariableName
+<br /> | CAST ( literal AS <a href="#type">type</a> )
+</h4>
+<p>A string (text) literal starts and ends with a single quote. Two single quotes can be used to create a single quote inside a string.</p>
+<p>Example:</p>
+
+<div class="source">
+<div class="source"><pre class="prettyprint">'John''s car'
+$uuid
+cast('2020-12-01T20:00:00.000' as date)
+</pre></div></div>
+<hr />
+</div></div>
+<div class="section" id="ordering">
+<h3 id="ordering">Ordering</h3>
+
+<div class="section">
+<h4><a name="dynamicOperand__ASC__DESC_"></a>
+<a href="#dynamicOperand">dynamicOperand</a> [ ASC | DESC ]
+</h4>
+<p>Ordering by an indexed property will use that index if possible. If there is no index that can be used for the given sort order, then the result is fully read in memory and sorted there.</p>
+<p>As a special case, sorting by &#x201c;jcr:score&#x201d; in descending order is ignored (removed from the list), as this is what the fulltext index does anyway (and if no fulltext index is used, then the score doesn&#x2019;t apply). If for some reason you want to enforce sorting by &#x201c;jcr:score&#x201d;, then you can use the workaround to order by &#x201c;LOWER([jcr:score]) DESC&#x201d;.</p>
+<p>Examples:</p>
+
+<div class="source">
+<div class="source"><pre class="prettyprint">[lastName]
+[price] desc
+</pre></div></div>
+<hr />
+</div></div>
+<div class="section" id="dynamicOperand">
+<h3 id="dynamicOperand">Dynamic Operand</h3>
+
+<div class="section">
+<h4><a name="a_selectorName_.__propertyName___LENGTH_dynamicOperand______NAME__LOCALNAME__SCORE____selectorName______LOWER__UPPER___dynamicOperand____COALESCE__dynamicOperand1_dynamicOperand2____PROPERTY__propertyName_type_"></a>
+[ selectorName . ] propertyName
+<br />  | LENGTH( dynamicOperand  )
+<br />  | { NAME | LOCALNAME | SCORE } ( [ selectorName ] )
+<br />  | { LOWER | UPPER } ( dynamicOperand )
+<br />  | COALESCE ( dynamicOperand1, dynamicOperand2 )
+<br />  | PROPERTY ( propertyName, <a href="#type">type</a> )
+</h4>
+<p>The selector name is only needed if the query contains multiple selectors.</p>
+<p>&#x201c;coalesce&#x201d;: this returns the first operand if it is not null, and the second operand otherwise. <tt>@since Oak 1.8</tt></p>
+<p>&#x201c;property&#x201d;: This feature is rarely used. It allows to filter for all properties with a given type. Example: the condition <tt>property(*, Reference) = $uuid</tt> will search for any property of type <tt>Reference</tt>.</p>
+<p>&#x201c;lower&#x201d;, &#x201c;upper&#x201d;, &#x201c;length&#x201d;: Indexes on functions are supported <tt>@since Oak 1.6</tt>, see OAK-3574.</p>
+<p>Examples:</p>
+
+<div class="source">
+<div class="source"><pre class="prettyprint">lower([firstName])
+coalesce([lastName], name())
+length(coalesce([lastName], name()))
+</pre></div></div>
+<hr />
+</div></div>
+<div class="section" id="type">
+<h3 id="type">Type</h3>
+
+<div class="section">
+<h4><a name="STRING___BINARY___DATE___LONG___DOUBLE___DECIMAL___BOOLEAN___NAME___PATH___REFERENCE___WEAKREFERENCE___URI"></a>
+<br />STRING 
+<br /> | BINARY 
+<br /> | DATE 
+<br /> | LONG 
+<br /> | DOUBLE 
+<br /> | DECIMAL 
+<br /> | BOOLEAN 
+<br /> | NAME 
+<br /> | PATH 
+<br /> | REFERENCE 
+<br /> | WEAKREFERENCE 
+<br /> | URI
+</h4>
+<p>This is the list of all JCR property types.</p>
+<hr />
+</div></div>
+<div class="section" id="options">
+<h3 id="options">Options</h3>
+
+<div class="section">
+<h4><a name="OPTION___TRAVERSAL__OK__WARN__FAIL__DEFAULT____INDEX_TAG_tagName_____...__"></a>
+OPTION( { 
+<br />&#160;&#160; TRAVERSAL { OK | WARN | FAIL | DEFAULT } | 
+<br />&#160;&#160; INDEX TAG tagName 
+<br /> } [ , ... ] )
+</h4>
+<p>&#x201c;traversal&#x201d;: by default, queries without index will log a warning, except if the configuration option <tt>QueryEngineSettings.failTraversal</tt> is changed The traversal option can be used to change the behavior of the given query: &#x201c;ok&#x201d; to not log a warning, &#x201c;warn&#x201d; to log a warning, &#x201c;fail&#x201d; to fail the query, and &#x201c;default&#x201d; to use the default setting.</p>
+<p>&#x201c;index tag&#x201d;: by default, queries will use the index with the lowest expected cost (as in relational databases). To only consider some of the indexes, add tags (a multi-valued String property) to the index(es) of choice, and specify this tag in the query.</p>
+<p>Examples:</p>
+
+<div class="source">
+<div class="source"><pre class="prettyprint">option(traversal fail)
+</pre></div></div>
+<hr />
+</div></div>
+<div class="section" id="explain">
+<h3 id="explain">Explain Query</h3>
+
+<div class="section">
+<h4><a name="EXPLAIN_MEASURE__query_"></a>
+EXPLAIN [MEASURE] { <a href="#query">query</a> }
+</h4>
+<p>Does not run the query, but only computes and returns the query plan. With EXPLAIN MEASURE, the expected cost is calculated as well. In both cases, the query result will only have one column called &#x2018;plan&#x2019;, and one row that contains the plan.</p>
+<p>Examples:</p>
+
+<div class="source">
+<div class="source"><pre class="prettyprint">explain measure 
+select * from [nt:base] where [jcr:uuid] = 1
+</pre></div></div>
+<p>Result:</p>
+
+<div class="source">
+<div class="source"><pre class="prettyprint">plan = [nt:base] as [nt:base] 
+/* property uuid = 1 where [nt:base].[jcr:uuid] = 1 */  
+cost: { &quot;nt:base&quot;: 2.0 } 
+</pre></div></div>
+<p>This means the property index named &#x201c;uuid&#x201d; is used for this query. The expected cost (roughly the number of uncached I/O operations) is 2.</p>
+<hr />
+</div></div>
+<div class="section" id="measure">
+<h3 id="measure">Measure</h3>
+
+<div class="section">
+<h4><a name="MEASURE__query_"></a>
+MEASURE { <a href="#query">query</a> }
+</h4>
+<p>Runs the query, but instead of returning the result, returns the number of rows traversed. The query result has two columns, one called &#x2018;selector&#x2019; and one called &#x2018;scanCount&#x2019;. The result has at least two rows, one that represents the total (selector set to &#x2018;query&#x2019;), and one per selector used in the query. </p>
+<p>Examples:</p>
+
+<div class="source">
+<div class="source"><pre class="prettyprint">measure 
+select * from [nt:base] where [jcr:uuid] = 1
+</pre></div></div>
+<p>Result:</p>
+
+<div class="source">
+<div class="source"><pre class="prettyprint">selector = query
+scanCount = 0
+selector = nt:base
+scanCount = 0
+</pre></div></div>
+<p>In this case, the scanCount is zero because the query did not find any nodes.</p></div></div></div>
+        </div>
+      </div>
+    </div>
+    <hr/>
+    <footer>
+      <div class="container-fluid">
+        <div class="row-fluid">
+            <p>Copyright &copy;2012&#x2013;2018
+<a href="https://www.apache.org/">The Apache Software Foundation</a>.
+All rights reserved.</p>
+        </div>
+                          <div id="ohloh" class="pull-right">
+      <script type="text/javascript" src="https://www.ohloh.net/p/jackrabbit-oak/widgets/project_thin_badge.js"></script>
+    </div>
+        </div>
+    </footer>
+    </body>
+</html>
\ No newline at end of file

Modified: jackrabbit/site/live/oak/docs/query/grammar-sql2.html
URL: http://svn.apache.org/viewvc/jackrabbit/site/live/oak/docs/query/grammar-sql2.html?rev=1824978&r1=1824977&r2=1824978&view=diff
==============================================================================
--- jackrabbit/site/live/oak/docs/query/grammar-sql2.html (original)
+++ jackrabbit/site/live/oak/docs/query/grammar-sql2.html Wed Feb 21 16:00:36 2018
@@ -1,13 +1,13 @@
 <!DOCTYPE html>
 <!--
- | Generated by Apache Maven Doxia Site Renderer 1.7.4 at 2018-02-13 
+ | Generated by Apache Maven Doxia Site Renderer 1.7.4 at 2018-02-21 
  | Rendered using Apache Maven Fluido Skin 1.6
 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180213" />
+    <meta name="Date-Revision-yyyymmdd" content="20180221" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Jackrabbit Oak &#x2013; Oak SQL-2 Query Grammar</title>
     <link rel="stylesheet" href="../css/apache-maven-fluido-1.6.min.css" />
@@ -136,7 +136,7 @@
 
       <div id="breadcrumbs">
         <ul class="breadcrumb">
-        <li id="publishDate">Last Published: 2018-02-13<span class="divider">|</span>
+        <li id="publishDate">Last Published: 2018-02-21<span class="divider">|</span>
 </li>
           <li id="projectVersion">Version: 1.10-SNAPSHOT</li>
         </ul>
@@ -245,52 +245,56 @@
 
 <ul>
   
-<li><a href="#query">Query</a></li>
+<li>
+  <a href="#query">Query</a></li>
   
-<li><a href="#column">Column</a></li>
+<li>
+  <a href="#column">Column</a></li>
   
-<li><a href="#selector">Selector</a></li>
+<li>
+  <a href="#selector">Selector</a></li>
   
-<li><a href="#join">Join</a></li>
+<li>
+  <a href="#join">Join</a></li>
   
-<li><a href="#constraint">Constraint</a></li>
+<li>
+  <a href="#constraint">Constraint</a></li>
   
-<li><a href="#andCondition">And Condition</a></li>
+<li>
+  <a href="#and_condition">And Condition</a></li>
   
-<li><a href="#condition">Condition</a></li>
+<li>
+  <a href="#condition">Condition</a></li>
   
-<li><a href="#comparison">Comparison</a></li>
+<li>
+  <a href="#comparison">Comparison</a></li>
   
-<li><a href="#inComparison">In Comparison</a></li>
+<li>
+  <a href="#in_comparison">In Comparison</a></li>
   
-<li><a href="#staticOperand">Static Operand</a></li>
+<li>
+  <a href="#static_operand">Static Operand</a></li>
   
-<li><a href="#ordering">Ordering</a></li>
+<li>
+  <a href="#ordering">Ordering</a></li>
   
-<li><a href="#dynamicOperand">Dynamic Operand</a></li>
+<li>
+  <a href="#dynamic_operand">Dynamic Operand</a></li>
   
-<li><a href="#type">Type</a></li>
+<li>
+  <a href="#type">Type</a></li>
   
-<li><a href="#options">Options</a></li>
+<li>
+  <a href="#options">Options</a></li>
   
-<li><a href="#explain">Explain</a></li>
+<li>
+  <a href="#explain">Explain</a></li>
   
-<li><a href="#measure">Measure</a></li>
+<li>
+  <a href="#measure">Measure</a></li>
 </ul>
 <hr />
-
-<div class="section" id="query">
-<h3 id="query">Query</h3>
-
-<div class="section">
-<h4><a name="SELECT__DISTINCT_____column___...____FROM__selector__join_...____WHERE_constraint___UNION__ALLquery___ORDER_BY__ordering___..._____queryOptions_"></a>
-SELECT [ DISTINCT&#xa0;] { * | { <a href="#column">column</a> [ , ... ] } }
-<br /> FROM { <a href="#selector">selector</a> [ <a href="#join">join</a> ... ] }
-<br /> [ WHERE <a href="#constraint">constraint</a> ]
-<br /> [ UNION [ ALL&#xa0;]&#xa0;<a href="#query">query</a> ]
-<br /> [ ORDER BY { <a href="#ordering">ordering</a> [ , ... ] } ]
-<br /> [ <a href="#options">queryOptions</a> ]
-</h4>
+<h2><a name="query"></a>Query</h2><table class="railroad"><tr class="railroad"><td class="d"><code class="c">SELECT</code></td><td class="d"><table class="railroad"><tr class="railroad"><td class="ts"></td><td class="d">&nbsp;</td><td class="te"></td></tr><tr class="railroad"><td class="ls"></td><td class="d"><code class="c">DISTINCT&#xa0;</code></td><td class="le"></td></tr></table></td><td class="d"><table class="railroad"><tr class="railroad"><td class="ts"></td><td class="d"><code class="c">*</code></td><td class="te"></td></tr><tr class="railroad"><td class="ls"></td><td class="d"><table class="railroad"><tr class="railroad"><td class="d"><code class="c"><a href="#column">column</a></code></td><td class="d"><table class="railroad"><tr class="railroad"><td class="ts"></td><td class="d">&nbsp;</td><td class="te"></td></tr><tr class="railroad"><td class="ls"></td><td class="d"><table class="railroad"><tr class="railroad"><td class="d"><code class="c">, ...</code></td></tr></table>
 </td><td class="le"></td></tr></table></td></tr></table></td><td class="le"></td></tr></table></td><td class="d"><code class="c">FROM <a href="#selector">selector</a></code></td><td class="d"><table class="railroad"><tr class="railroad"><td class="ts"></td><td class="d">&nbsp;</td><td class="te"></td></tr><tr class="railroad"><td class="ls"></td><td class="d"><table class="railroad"><tr class="railroad"><td class="d"><code class="c"><a href="#join">join</a> ...</code></td></tr></table></td><td class="le"></td></tr></table></td></tr></table><br /><table class="railroad"><tr class="railroad"><td class="d"><table class="railroad"><tr class="railroad"><td class="ts"></td><td class="d">&nbsp;</td><td class="te"></td></tr><tr class="railroad"><td class="ls"></td><td class="d"><table class="railroad"><tr class="railroad"><td class="d"><code class="c">WHERE <a href="#constraint">constraint</a></code></td></tr></table></td><td class="le"></td></tr></table></td><td class="d"><table class="rai
 lroad"><tr class="railroad"><td class="ts"></td><td class="d">&nbsp;</td><td class="te"></td></tr><tr class="railroad"><td class="ls"></td><td class="d"><table class="railroad"><tr class="railroad"><td class="d"><code class="c">UNION</code></td><td class="d"><table class="railroad"><tr class="railroad"><td class="ts"></td><td class="d">&nbsp;</td><td class="te"></td></tr><tr class="railroad"><td class="ls"></td><td class="d"><code class="c">ALL</code></td><td class="le"></td></tr></table></td><td class="d"><code class="c"><a href="#query">query</a></code></td></tr></table></td><td class="le"></td></tr></table></td></tr></table><br /><table class="railroad"><tr class="railroad"><td class="d"><table class="railroad"><tr class="railroad"><td class="ts"></td><td class="d">&nbsp;</td><td class="te"></td></tr><tr class="railroad"><td class="ls"></td><td class="d"><table class="railroad"><tr class="railroad"><td class="d"><code class="c">ORDER BY <a href="#ordering">ordering</a></code></td
 ><td class="d"><table class="railroad"><tr class="railroad"><td class="ts"></td><td class="d">&nbsp;</td><td class="te"></td></tr><tr class="railroad"><td class="ls"></td><td class="d"><table class="railroad"><tr class="railroad"><td class="d"><code class="c">, ...</code></td></tr></table></td><td class="le"></td></tr></table></td></tr></table></td><td class="le"></td></tr></table></td><td class="d"><table class="railroad"><tr class="railroad"><td class="ts"></td><td class="d">&nbsp;</td><td class="te"></td></tr><tr class="railroad"><td class="ls"></td><td class="d"><code class="c"><a href="#options">queryOptions</a></code></td><td class="le"></td></tr></table></td></tr></table>
 <p>All queries should have a path restriction (even if it&#x2019;s just, for example, &#x201c;/content&#x201d;), as this allows to shrink indexes.</p>
 <p>&#x201c;distinct&#x201d; ensures each row is only returned once.</p>
 <p>&#x201c;union&#x201d; combines the result of this query with the results of another query, where &#x201c;union all&#x201d; does not remove duplicates.</p>
@@ -303,17 +307,7 @@ select [jcr:path] from [oak:QueryIndexDe
 select [jcr:path], [jcr:score], * from [nt:base] as a where [type] = 'report' and isdescendantnode(a, '/etc') option(traversal fail)
 </pre></div></div>
 <hr />
-</div></div>
-<div class="section" id="column">
-<h3 id="column">Column</h3>
-
-<div class="section">
-<h4><a name="a__selectorName_.___propertyName_____EXCERPTselectorName__rep:spellcheck___AS_aliasName_"></a>
-{ [ selectorName . ] { propertyName | * }
-<br /> | EXCERPT([selectorName])
-<br /> | rep:spellcheck()
-<br /> } [ AS aliasName ]
-</h4>
+<h2><a name="column"></a>Column</h2><table class="railroad"><tr class="railroad"><td class="ts"></td><td class="d"><table class="railroad"><tr class="railroad"><td class="d"><table class="railroad"><tr class="railroad"><td class="ts"></td><td class="d">&nbsp;</td><td class="te"></td></tr><tr class="railroad"><td class="ls"></td><td class="d"><table class="railroad"><tr class="railroad"><td class="d"><code class="c"><a href="#name">selectorName</a> .</code></td></tr></table></td><td class="le"></td></tr></table></td><td class="d"><table class="railroad"><tr class="railroad"><td class="ts"></td><td class="d"><code class="c"><a href="#name">propertyName</a></code></td><td class="te"></td></tr><tr class="railroad"><td class="ls"></td><td class="d"><code class="c">*</code></td><td class="le"></td></tr></table></td></tr></table></td><td class="te"></td></tr><tr class="railroad"><td class="ks"></td><td class="d"><table class="railroad"><tr class="railroad"><td class="d"><code class="c">EXC
 ERPT (</code></td><td class="d"><table class="railroad"><tr class="railroad"><td class="ts"></td><td class="d">&nbsp;</td><td class="te"></td></tr><tr class="railroad"><td class="ls"></td><td class="d"><code class="c"><a href="#name">selectorName</a></code></td><td class="le"></td></tr></table></td><td class="d"><code class="c">)</code></td></tr></table></td><td class="ke"></td></tr><tr class="railroad"><td class="ls"></td><td class="d"><table class="railroad"><tr class="railroad"><td class="d"><code class="c">REP : SPELLCHECK ( )</code></td></tr></table></td><td class="le"></td></tr></table><br /><table class="railroad"><tr class="railroad"><td class="ts"></td><td class="d">&nbsp;</td><td class="te"></td></tr><tr class="railroad"><td class="ls"></td><td class="d"><table class="railroad"><tr class="railroad"><td class="d"><code class="c">AS <a href="#name">columnName</a></code></td></tr></table></td><td class="le"></td></tr></table>
 <p>It is recommended to enclose property names in square brackets.</p>
 <p>For the &#x201c;excerpt&#x201d; property, see <a href="query-engine.html#Excerpts_and_Highlighting">Excerpts and Highlighting</a>.</p>
 <p>Not listed above are &#x201c;special&#x201d; properties such as &#x201c;[jcr:path]&#x201d; (the path), &#x201c;[jcr:score]&#x201d; (the score), &#x201c;[rep:suggest()]&#x201d;.</p>
@@ -327,14 +321,7 @@ a.*
 a.[sling:resourceType]
 </pre></div></div>
 <hr />
-</div></div>
-<div class="section" id="selector">
-<h3 id="selector">Selector</h3>
-
-<div class="section">
-<h4><a name="nodeTypeName__AS_selectorName_"></a>
-nodeTypeName [ AS selectorName ]
-</h4>
+<h2><a name="selector"></a>Selector</h2><table class="railroad"><tr class="railroad"><td class="d"><code class="c"><a href="#name">nodeTypeName</a></code></td><td class="d"><table class="railroad"><tr class="railroad"><td class="ts"></td><td class="d">&nbsp;</td><td class="te"></td></tr><tr class="railroad"><td class="ls"></td><td class="d"><table class="railroad"><tr class="railroad"><td class="d"><code class="c">AS <a href="#name">selectorName</a></code></td></tr></table></td><td class="le"></td></tr></table></td></tr></table>
 <p>The nodetype name can be either a primary nodetype or a mixin nodetype. It is recommended to specify the nodetype name in square brackes.</p>
 <p>Examples:</p>
 
@@ -342,18 +329,7 @@ nodeTypeName [ AS selectorName ]
 <div class="source"><pre class="prettyprint">[sling:Folder] as a
 </pre></div></div>
 <hr />
-</div></div>
-<div class="section" id="join">
-<h3 id="join">Join</h3>
-
-<div class="section">
-<h4><a name="a_INNER___LEFT__RIGHT__OUTER__JOIN_rightSelector_ON__selectorName_._propertyName__joinSelectorName_._joinPropertyName____ISSAMENODE_selectorName__joinSelectorName___selectorPathName______ISCHILDNODE_childSelectorName__parentSelectorName_____ISDESCENDANTNODE_descendantSelectorName__ancestorSelectorName__"></a>
-{ INNER | { LEFT | RIGHT } OUTER } JOIN <a href="#selector">rightSelector</a> ON
-<br /> { selectorName . propertyName = joinSelectorName . joinPropertyName }
-<br /> | { ISSAMENODE( selectorName , joinSelectorName [ , selectorPathName ] ) }
-<br /> | { ISCHILDNODE( childSelectorName , parentSelectorName ) }
-<br /> | { ISDESCENDANTNODE( descendantSelectorName , ancestorSelectorName ) }
-</h4>
+<h2><a name="join"></a>Join</h2><table class="railroad"><tr class="railroad"><td class="d"><table class="railroad"><tr class="railroad"><td class="ts"></td><td class="d"><code class="c">INNER</code></td><td class="te"></td></tr><tr class="railroad"><td class="ls"></td><td class="d"><table class="railroad"><tr class="railroad"><td class="d"><table class="railroad"><tr class="railroad"><td class="ts"></td><td class="d"><code class="c">LEFT</code></td><td class="te"></td></tr><tr class="railroad"><td class="ls"></td><td class="d"><code class="c">RIGHT</code></td><td class="le"></td></tr></table></td><td class="d"><code class="c">OUTER</code></td></tr></table></td><td class="le"></td></tr></table></td><td class="d"><code class="c">JOIN <a href="#selector">rightSelector</a> ON</code></td></tr></table><br /><table class="railroad"><tr class="railroad"><td class="ts"></td><td class="d"><table class="railroad"><tr class="railroad"><td class="d"><code class="c"><a href="#name">selectorName</
 a> . <a href="#name">propertyName</a> = <a href="#name">joinSelectorName</a> . <a href="#name">joinPropertyName</a></code></td></tr></table></td><td class="te"></td></tr><tr class="railroad"><td class="ks"></td><td class="d"><table class="railroad"><tr class="railroad"><td class="d"><code class="c">ISSAMENODE ( <a href="#name">selectorName</a> , <a href="#name">joinSelectorName</a></code></td><td class="d"><table class="railroad"><tr class="railroad"><td class="ts"></td><td class="d">&nbsp;</td><td class="te"></td></tr><tr class="railroad"><td class="ls"></td><td class="d"><table class="railroad"><tr class="railroad"><td class="d"><code class="c">, <a href="#name">selectorPathName</a></code></td></tr></table></td><td class="le"></td></tr></table></td><td class="d"><code class="c">)</code></td></tr></table></td><td class="ke"></td></tr><tr class="railroad"><td class="ks"></td><td class="d"><table class="railroad"><tr class="railroad"><td class="d"><code class="c">ISCHILDNODE ( <a hre
 f="#name">childSelectorName</a> , <a href="#name">parentSelectorName</a> )</code></td></tr></table></td><td class="ke"></td></tr><tr class="railroad"><td class="ls"></td><td class="d"><table class="railroad"><tr class="railroad"><td class="d"><code class="c">ISDESCENDANTNODE ( <a href="#name">descendantSelectorName</a> , <a href="#name">ancestorSelectorName</a> )</code></td></tr></table></td><td class="le"></td></tr></table>
 <p>An &#x201c;inner join&#x201d; only returns entries if nodes are found on both the left and right selector. A &#x201c;left outer join&#x201d; will return entries that don&#x2019;t have matching nodes on the right selector. A &#x201c;right outer join&#x201d; will return entries that don&#x2019;t have matching nodes on the left selector. For outer joins, all the properties of the selector that doesn&#x2019;t have a matching node are null.</p>
 <p>Examples:</p>
 <p>All nodes below /oak:index that <i>don&#x2019;t</i> have a child node:</p>
@@ -366,45 +342,14 @@ nodeTypeName [ AS selectorName ]
   order by a.[jcr:path]
 </pre></div></div>
 <hr />
-</div></div>
-<div class="section" id="constraint">
-<h3 id="constraint">Constraint</h3>
-
-<div class="section">
-<h4><a name="andCondition___OR_andCondition__..._"></a>
-<a href="#andCondition">andCondition</a> [ { OR <a href="#andCondition">andCondition</a> } [...] ]
-</h4>
+<h2><a name="constraint"></a>Constraint</h2><table class="railroad"><tr class="railroad"><td class="d"><code class="c"><a href="#and_condition">andCondition</a></code></td><td class="d"><table class="railroad"><tr class="railroad"><td class="ts"></td><td class="d">&nbsp;</td><td class="te"></td></tr><tr class="railroad"><td class="ls"></td><td class="d"><table class="railroad"><tr class="railroad"><td class="d"><code class="c">OR <a href="#and_condition">andCondition</a></code></td><td class="d"><table class="railroad"><tr class="railroad"><td class="ts"></td><td class="d">&nbsp;</td><td class="te"></td></tr><tr class="railroad"><td class="ls"></td><td class="d"><code class="c">...</code></td><td class="le"></td></tr></table></td></tr></table></td><td class="le"></td></tr></table></td></tr></table>
 <p>&#x201c;or&#x201d; conditions of the form &#x201c;[x]=1 or [x]=2&#x201d; are automatically converted to &#x201c;[x] in(1, 2)&#x201d;, and can use the same an index.</p>
 <p>&#x201c;or&#x201d; conditions of the form &#x201c;[x]=1 or [y]=2&#x201d; are more complicated. Oak will try two options: first, what is the expected cost to use a &#x201c;union&#x201d; query (one query with x=1, and a second query with y=2). If using &#x201c;union&#x201d; results in a lower estimated cost, then &#x201c;union&#x201d; is used. This can be the case, for example, if there are two distinct indexes, one on x, and another on y.</p>
 <hr />
-</div></div>
-<div class="section" id="andCondition">
-<h3 id="andCondition">And Condition</h3>
-
-<div class="section">
-<h4><a name="condition___AND_condition__..._"></a>
-<a href="#condition">condition</a> [ { AND <a href="#condition">condition</a> } [...] ]
-</h4>
+<h2><a name="and_condition"></a>And Condition</h2><table class="railroad"><tr class="railroad"><td class="d"><code class="c"><a href="#condition">condition</a></code></td><td class="d"><table class="railroad"><tr class="railroad"><td class="ts"></td><td class="d">&nbsp;</td><td class="te"></td></tr><tr class="railroad"><td class="ls"></td><td class="d"><table class="railroad"><tr class="railroad"><td class="d"><code class="c">AND <a href="#condition">condition</a></code></td><td class="d"><table class="railroad"><tr class="railroad"><td class="ts"></td><td class="d">&nbsp;</td><td class="te"></td></tr><tr class="railroad"><td class="ls"></td><td class="d"><code class="c">...</code></td><td class="le"></td></tr></table></td></tr></table></td><td class="le"></td></tr></table></td></tr></table>
 <p>A special case (not found in relational databases) is &#x201c;and&#x201d; conditions of the form &#x201c;[x]=1 and [x]=2&#x201d;. They will match nodes with multi-valued properties, where the property value contains both 1 and 2.</p>
 <hr />
-</div></div>
-<div class="section" id="condition">
-<h3 id="condition">Condition</h3>
-
-<div class="section">
-<h4><a name="comparison_inComparison__NOT_constraint___constraint____selectorName_.__propertyName_IS__NOT__NULL__CONTAINS____selectorName_.__propertyName____selectorName_._____staticOperand____ISSAMENODE__ISCHILDNODE__ISDESCENDANTNODE_____selectorName___pathString___SIMILAR___selectorName_.___propertyName_____staticOperand___NATIVE___selectorName___language__staticOperand___SPELLCHECK___selectorName___staticOperand___SUGGEST___selectorName___staticOperand_"></a>
-<a href="#comparison">comparison</a>
-<br /> <a href="#inComparison">inComparison</a>
-<br /> | NOT <a href="#constraint">constraint</a>
-<br /> | ( <a href="#constraint">constraint</a> )
-<br /> | [ selectorName . ] propertyName IS [ NOT ] NULL
-<br /> | CONTAINS( { { [ selectorName . ] propertyName } | { selectorName . * } } , staticOperand )
-<br /> | { ISSAMENODE | ISCHILDNODE | ISDESCENDANTNODE } (  [ selectorName , ] pathString )
-<br /> | SIMILAR ( [ selectorName . ] { propertyName | * } , staticOperand )
-<br /> | NATIVE ( [ selectorName , ] language , staticOperand )
-<br /> | SPELLCHECK ( [ selectorName , ] staticOperand )
-<br /> | SUGGEST ( [ selectorName , ] staticOperand )
-</h4>
+<h2><a name="condition"></a>Condition</h2><table class="railroad"><tr class="railroad"><td class="ts"></td><td class="d"><code class="c"><a href="#comparison">comparison</a></code></td><td class="te"></td></tr><tr class="railroad"><td class="ks"></td><td class="d"><code class="c"><a href="#in_comparison">inComparison</a></code></td><td class="ke"></td></tr><tr class="railroad"><td class="ks"></td><td class="d"><table class="railroad"><tr class="railroad"><td class="d"><code class="c">NOT <a href="#constraint">constraint</a></code></td></tr></table></td><td class="ke"></td></tr><tr class="railroad"><td class="ks"></td><td class="d"><table class="railroad"><tr class="railroad"><td class="d"><code class="c">( <a href="#constraint">constraint</a> )</code></td></tr></table></td><td class="ke"></td></tr><tr class="railroad"><td class="ks"></td><td class="d"><table class="railroad"><tr class="railroad"><td class="d"><table class="railroad"><tr class="railroad"><td class="ts"></td><td class
 ="d">&nbsp;</td><td class="te"></td></tr><tr class="railroad"><td class="ls"></td><td class="d"><table class="railroad"><tr class="railroad"><td class="d"><code class="c"><a href="#name">selectorName</a> .</code></td></tr></table></td><td class="le"></td></tr></table></td><td class="d"><code class="c"><a href="#name">propertyName</a> IS</code></td><td class="d"><table class="railroad"><tr class="railroad"><td class="ts"></td><td class="d">&nbsp;</td><td class="te"></td></tr><tr class="railroad"><td class="ls"></td><td class="d"><code class="c">NOT</code></td><td class="le"></td></tr></table></td><td class="d"><code class="c">NULL</code></td></tr></table></td><td class="ke"></td></tr><tr class="railroad"><td class="ks"></td><td class="d"><table class="railroad"><tr class="railroad"><td class="d"><code class="c">CONTAINS (</code></td><td class="d"><table class="railroad"><tr class="railroad"><td class="ts"></td><td class="d"><table class="railroad"><tr class="railroad"><td class="d"><
 table class="railroad"><tr class="railroad"><td class="ts"></td><td class="d">&nbsp;</td><td class="te"></td></tr><tr class="railroad"><td class="ls"></td><td class="d"><table class="railroad"><tr class="railroad"><td class="d"><code class="c"><a href="#name">selectorName</a> .</code></td></tr></table></td><td class="le"></td></tr></table></td><td class="d"><code class="c"><a href="#name">propertyName</a></code></td></tr></table></td><td class="te"></td></tr><tr class="railroad"><td class="ls"></td><td class="d"><table class="railroad"><tr class="railroad"><td class="d"><code class="c"><a href="#name">selectorName</a> . *</code></td></tr></table></td><td class="le"></td></tr></table></td><td class="d"><code class="c">, <a href="#static_operand">staticOperand</a> )</code></td></tr></table></td><td class="ke"></td></tr><tr class="railroad"><td class="ks"></td><td class="d"><table class="railroad"><tr class="railroad"><td class="d"><table class="railroad"><tr class="railroad"><td class
 ="ts"></td><td class="d"><code class="c">ISSAMENODE</code></td><td class="te"></td></tr><tr class="railroad"><td class="ks"></td><td class="d"><code class="c">ISCHILDNODE</code></td><td class="ke"></td></tr><tr class="railroad"><td class="ls"></td><td class="d"><code class="c">ISDESCENDANTNODE</code></td><td class="le"></td></tr></table></td><td class="d"><code class="c">(</code></td><td class="d"><table class="railroad"><tr class="railroad"><td class="ts"></td><td class="d">&nbsp;</td><td class="te"></td></tr><tr class="railroad"><td class="ls"></td><td class="d"><table class="railroad"><tr class="railroad"><td class="d"><code class="c"><a href="#name">selectorName</a> ,</code></td></tr></table></td><td class="le"></td></tr></table></td><td class="d"><code class="c"><a href="#name">pathName</a> )</code></td></tr></table></td><td class="ke"></td></tr><tr class="railroad"><td class="ks"></td><td class="d"><table class="railroad"><tr class="railroad"><td class="d"><code class="c">SIMI
 LAR (</code></td><td class="d"><table class="railroad"><tr class="railroad"><td class="ts"></td><td class="d">&nbsp;</td><td class="te"></td></tr><tr class="railroad"><td class="ls"></td><td class="d"><table class="railroad"><tr class="railroad"><td class="d"><code class="c"><a href="#name">selectorName</a> .</code></td></tr></table></td><td class="le"></td></tr></table></td><td class="d"><table class="railroad"><tr class="railroad"><td class="ts"></td><td class="d"><code class="c"><a href="#name">propertyName</a></code></td><td class="te"></td></tr><tr class="railroad"><td class="ls"></td><td class="d"><code class="c">*</code></td><td class="le"></td></tr></table></td><td class="d"><code class="c">, <a href="#static_operand">staticOperand</a> )</code></td></tr></table></td><td class="ke"></td></tr><tr class="railroad"><td class="ks"></td><td class="d"><table class="railroad"><tr class="railroad"><td class="d"><code class="c">NATIVE (</code></td><td class="d"><table class="railroad"
 ><tr class="railroad"><td class="ts"></td><td class="d">&nbsp;</td><td class="te"></td></tr><tr class="railroad"><td class="ls"></td><td class="d"><table class="railroad"><tr class="railroad"><td class="d"><code class="c"><a href="#name">selectorName</a> ,</code></td></tr></table></td><td class="le"></td></tr></table></td><td class="d"><code class="c"><a href="#name">languageName</a> , <a href="#static_operand">staticOperand</a> )</code></td></tr></table></td><td class="ke"></td></tr><tr class="railroad"><td class="ks"></td><td class="d"><table class="railroad"><tr class="railroad"><td class="d"><code class="c">SPELLCHECK (</code></td><td class="d"><table class="railroad"><tr class="railroad"><td class="ts"></td><td class="d">&nbsp;</td><td class="te"></td></tr><tr class="railroad"><td class="ls"></td><td class="d"><table class="railroad"><tr class="railroad"><td class="d"><code class="c"><a href="#name">selectorName</a> ,</code></td></tr></table></td><td class="le"></td></tr></tabl
 e></td><td class="d"><code class="c"><a href="#static_operand">staticOperand</a> )</code></td></tr></table></td><td class="ke"></td></tr><tr class="railroad"><td class="ls"></td><td class="d"><table class="railroad"><tr class="railroad"><td class="d"><code class="c">SUGGEST (</code></td><td class="d"><table class="railroad"><tr class="railroad"><td class="ts"></td><td class="d">&nbsp;</td><td class="te"></td></tr><tr class="railroad"><td class="ls"></td><td class="d"><table class="railroad"><tr class="railroad"><td class="d"><code class="c"><a href="#name">selectorName</a> ,</code></td></tr></table></td><td class="le"></td></tr></table></td><td class="d"><code class="c"><a href="#static_operand">staticOperand</a> )</code></td></tr></table></td><td class="le"></td></tr></table>
 <p>&#x201c;not&#x201d; conditions can not typically use an index.</p>
 <p>&#x201c;contains&#x201d;: see <a href="query-engine.html#Full-Text_Queries">Full-Text Queries</a>.</p>
 <p>&#x201c;similar&#x201d;: see <a href="query-engine.html#Similarity_Queries">Similarity Queries</a>.</p>
@@ -420,16 +365,7 @@ select [rep:suggest()] from [nt:base] wh
 select [rep:spellcheck()] from [nt:base] as a where spellcheck('helo') and issamenode(a, '/')
 </pre></div></div>
 <hr />
-</div></div>
-<div class="section" id="comparison">
-<h3 id="comparison">Comparison</h3>
-
-<div class="section">
-<h4><a name="dynamicOperand______________LIKE__staticOperand"></a>
-<a href="#dynamicOperand">dynamicOperand</a> 
-{ = | &lt;&gt; | &lt; | &lt;= | &gt; | &gt;= | LIKE } 
-<a href="#staticOperand">staticOperand</a>
-</h4>
+<h2><a name="comparison"></a>Comparison</h2><table class="railroad"><tr class="railroad"><td class="d"><code class="c"><a href="#dynamic_operand">dynamicOperand</a></code></td><td class="d"><table class="railroad"><tr class="railroad"><td class="ts"></td><td class="d"><code class="c">=</code></td><td class="te"></td></tr><tr class="railroad"><td class="ks"></td><td class="d"><table class="railroad"><tr class="railroad"><td class="d"><code class="c">&lt; &gt;</code></td></tr></table></td><td class="ke"></td></tr><tr class="railroad"><td class="ks"></td><td class="d"><code class="c">&lt;</code></td><td class="ke"></td></tr><tr class="railroad"><td class="ks"></td><td class="d"><table class="railroad"><tr class="railroad"><td class="d"><code class="c">&lt; =</code></td></tr></table></td><td class="ke"></td></tr><tr class="railroad"><td class="ks"></td><td class="d"><code class="c">&gt;</code></td><td class="ke"></td></tr><tr class="railroad"><td class="ks"></td><td class="d"><table cla
 ss="railroad"><tr class="railroad"><td class="d"><code class="c">&gt; =</code></td></tr></table></td><td class="ke"></td></tr><tr class="railroad"><td class="ls"></td><td class="d"><code class="c">LIKE</code></td><td class="le"></td></tr></table></td><td class="d"><code class="c"><a href="#static_operand">staticOperand</a></code></td></tr></table>
 <p>&#x201c;like&#x201d;: when comparing with LIKE, the wildcards characters are &#x2018;<i>&#x2018; (any one character) and &#x2019;%&#x2018; (any characters). An index is used, except if the operand starts with a wildcard. To search for the characters &#x2019;%&#x2018; and &#x2019;</i>&#x2019;, the characters need to be escaped using &#x2019;' (backslash).</p>
 <p>Comparison using &lt;, &gt;, &gt;=, and &lt;= can use an index if the property in the index is ordered.</p>
 <p>Examples:</p>
@@ -438,30 +374,14 @@ select [rep:spellcheck()] from [nt:base]
 <div class="source"><pre class="prettyprint">[name] like '%: 100 \%'
 </pre></div></div>
 <hr />
-</div></div>
-<div class="section" id="inComparison">
-<h3 id="inComparison">In Comparison</h3>
-
-<div class="section">
-<h4><a name="dynamicOperand_IN__staticOperand__..._"></a>
-<a href="#dynamicOperand">dynamicOperand</a> IN ( <a href="#staticOperand">staticOperand</a> [, ...] )
-</h4>
+<h2><a name="in_comparison"></a>In Comparison</h2><table class="railroad"><tr class="railroad"><td class="d"><code class="c"><a href="#dynamic_operand">dynamicOperand</a> IN ( <a href="#static_operand">staticOperand</a></code></td><td class="d"><table class="railroad"><tr class="railroad"><td class="ts"></td><td class="d">&nbsp;</td><td class="te"></td></tr><tr class="railroad"><td class="ls"></td><td class="d"><table class="railroad"><tr class="railroad"><td class="d"><code class="c">, ...</code></td></tr></table></td><td class="le"></td></tr></table></td><td class="d"><code class="c">)</code></td></tr></table>
 <p>Examples:</p>
 
 <div class="source">
 <div class="source"><pre class="prettyprint">[status] in('active', 'inactive')
 </pre></div></div>
 <hr />
-</div></div>
-<div class="section" id="staticOperand">
-<h3 id="staticOperand">Static Operand</h3>
-
-<div class="section">
-<h4><a name="literal___bindVariableName__CAST__literal_AS_type_"></a>
-literal
-<br /> | $ bindVariableName
-<br /> | CAST ( literal AS <a href="#type">type</a> )
-</h4>
+<h2><a name="static_operand"></a>Static Operand</h2><table class="railroad"><tr class="railroad"><td class="ts"></td><td class="d"><code class="c"><a href="#literal">literal</a></code></td><td class="te"></td></tr><tr class="railroad"><td class="ks"></td><td class="d"><table class="railroad"><tr class="railroad"><td class="d"><code class="c">$ <a href="#name">bindVariableName</a></code></td></tr></table></td><td class="ke"></td></tr><tr class="railroad"><td class="ls"></td><td class="d"><table class="railroad"><tr class="railroad"><td class="d"><code class="c">CAST ( <a href="#literal">literal</a> AS <a href="#type">type</a> )</code></td></tr></table></td><td class="le"></td></tr></table>
 <p>A string (text) literal starts and ends with a single quote. Two single quotes can be used to create a single quote inside a string.</p>
 <p>Example:</p>
 
@@ -471,14 +391,7 @@ $uuid
 cast('2020-12-01T20:00:00.000' as date)
 </pre></div></div>
 <hr />
-</div></div>
-<div class="section" id="ordering">
-<h3 id="ordering">Ordering</h3>
-
-<div class="section">
-<h4><a name="dynamicOperand__ASC__DESC_"></a>
-<a href="#dynamicOperand">dynamicOperand</a> [ ASC | DESC ]
-</h4>
+<h2><a name="ordering"></a>Ordering</h2><table class="railroad"><tr class="railroad"><td class="d"><code class="c"><a href="#name">simpleName</a></code></td><td class="d"><table class="railroad"><tr class="railroad"><td class="ts"></td><td class="d">&nbsp;</td><td class="te"></td></tr><tr class="railroad"><td class="ls"></td><td class="d"><table class="railroad"><tr class="railroad"><td class="ts"></td><td class="d"><code class="c">ASC</code></td><td class="te"></td></tr><tr class="railroad"><td class="ls"></td><td class="d"><code class="c">DESC</code></td><td class="le"></td></tr></table></td><td class="le"></td></tr></table></td></tr></table>
 <p>Ordering by an indexed property will use that index if possible. If there is no index that can be used for the given sort order, then the result is fully read in memory and sorted there.</p>
 <p>As a special case, sorting by &#x201c;jcr:score&#x201d; in descending order is ignored (removed from the list), as this is what the fulltext index does anyway (and if no fulltext index is used, then the score doesn&#x2019;t apply). If for some reason you want to enforce sorting by &#x201c;jcr:score&#x201d;, then you can use the workaround to order by &#x201c;LOWER([jcr:score]) DESC&#x201d;.</p>
 <p>Examples:</p>
@@ -488,19 +401,7 @@ cast('2020-12-01T20:00:00.000' as date)
 [price] desc
 </pre></div></div>
 <hr />
-</div></div>
-<div class="section" id="dynamicOperand">
-<h3 id="dynamicOperand">Dynamic Operand</h3>
-
-<div class="section">
-<h4><a name="a_selectorName_.__propertyName___LENGTH_dynamicOperand______NAME__LOCALNAME__SCORE____selectorName______LOWER__UPPER___dynamicOperand____COALESCE__dynamicOperand1_dynamicOperand2____PROPERTY__propertyName_type_"></a>
-[ selectorName . ] propertyName
-<br />  | LENGTH( dynamicOperand  )
-<br />  | { NAME | LOCALNAME | SCORE } ( [ selectorName ] )
-<br />  | { LOWER | UPPER } ( dynamicOperand )
-<br />  | COALESCE ( dynamicOperand1, dynamicOperand2 )
-<br />  | PROPERTY ( propertyName, <a href="#type">type</a> )
-</h4>
+<h2><a name="dynamic_operand"></a>Dynamic Operand</h2><table class="railroad"><tr class="railroad"><td class="ts"></td><td class="d"><table class="railroad"><tr class="railroad"><td class="d"><table class="railroad"><tr class="railroad"><td class="ts"></td><td class="d">&nbsp;</td><td class="te"></td></tr><tr class="railroad"><td class="ls"></td><td class="d"><table class="railroad"><tr class="railroad"><td class="d"><code class="c"><a href="#name">selectorName</a> .</code></td></tr></table></td><td class="le"></td></tr></table></td><td class="d"><code class="c"><a href="#name">propertyName</a></code></td></tr></table></td><td class="te"></td></tr><tr class="railroad"><td class="ks"></td><td class="d"><table class="railroad"><tr class="railroad"><td class="d"><code class="c">LENGTH ( <a href="#dynamic_operand">dynamicOperand</a> )</code></td></tr></table></td><td class="ke"></td></tr><tr class="railroad"><td class="ks"></td><td class="d"><table class="railroad"><tr class="railroad">
 <td class="d"><table class="railroad"><tr class="railroad"><td class="ts"></td><td class="d"><code class="c">NAME</code></td><td class="te"></td></tr><tr class="railroad"><td class="ks"></td><td class="d"><code class="c">LOCALNAME</code></td><td class="ke"></td></tr><tr class="railroad"><td class="ls"></td><td class="d"><code class="c">SCORE</code></td><td class="le"></td></tr></table></td><td class="d"><code class="c">(</code></td><td class="d"><table class="railroad"><tr class="railroad"><td class="ts"></td><td class="d">&nbsp;</td><td class="te"></td></tr><tr class="railroad"><td class="ls"></td><td class="d"><code class="c"><a href="#name">selectorName</a></code></td><td class="le"></td></tr></table></td><td class="d"><code class="c">)</code></td></tr></table></td><td class="ke"></td></tr><tr class="railroad"><td class="ks"></td><td class="d"><table class="railroad"><tr class="railroad"><td class="d"><table class="railroad"><tr class="railroad"><td class="ts"></td><td class="d">
 <code class="c">LOWER</code></td><td class="te"></td></tr><tr class="railroad"><td class="ls"></td><td class="d"><code class="c">UPPER</code></td><td class="le"></td></tr></table></td><td class="d"><code class="c">( <a href="#dynamic_operand">dynamicOperand</a> )</code></td></tr></table></td><td class="ke"></td></tr><tr class="railroad"><td class="ks"></td><td class="d"><table class="railroad"><tr class="railroad"><td class="d"><code class="c">COALESCE ( <a href="#dynamic_operand">dynamicOperand</a> , <a href="#dynamic_operand">dynamicOperand</a> )</code></td></tr></table></td><td class="ke"></td></tr><tr class="railroad"><td class="ls"></td><td class="d"><table class="railroad"><tr class="railroad"><td class="d"><code class="c">PROPERTY ( <a href="#name">propertyName</a> , <a href="#type">type</a> )</code></td></tr></table></td><td class="le"></td></tr></table>
 <p>The selector name is only needed if the query contains multiple selectors.</p>
 <p>&#x201c;coalesce&#x201d;: this returns the first operand if it is not null, and the second operand otherwise. <tt>@since Oak 1.8</tt></p>
 <p>&#x201c;property&#x201d;: This feature is rarely used. It allows to filter for all properties with a given type. Example: the condition <tt>property(*, Reference) = $uuid</tt> will search for any property of type <tt>Reference</tt>.</p>
@@ -513,38 +414,10 @@ coalesce([lastName], name())
 length(coalesce([lastName], name()))
 </pre></div></div>
 <hr />
-</div></div>
-<div class="section" id="type">
-<h3 id="type">Type</h3>
-
-<div class="section">
-<h4><a name="STRING___BINARY___DATE___LONG___DOUBLE___DECIMAL___BOOLEAN___NAME___PATH___REFERENCE___WEAKREFERENCE___URI"></a>
-<br />STRING 
-<br /> | BINARY 
-<br /> | DATE 
-<br /> | LONG 
-<br /> | DOUBLE 
-<br /> | DECIMAL 
-<br /> | BOOLEAN 
-<br /> | NAME 
-<br /> | PATH 
-<br /> | REFERENCE 
-<br /> | WEAKREFERENCE 
-<br /> | URI
-</h4>
+<h2><a name="type"></a>Type</h2><table class="railroad"><tr class="railroad"><td class="ts"></td><td class="d"><code class="c">STRING</code></td><td class="te"></td></tr><tr class="railroad"><td class="ks"></td><td class="d"><code class="c">BINARY</code></td><td class="ke"></td></tr><tr class="railroad"><td class="ks"></td><td class="d"><code class="c">DATE</code></td><td class="ke"></td></tr><tr class="railroad"><td class="ks"></td><td class="d"><code class="c">LONG</code></td><td class="ke"></td></tr><tr class="railroad"><td class="ks"></td><td class="d"><code class="c">DOUBLE</code></td><td class="ke"></td></tr><tr class="railroad"><td class="ks"></td><td class="d"><code class="c">DECIMAL</code></td><td class="ke"></td></tr><tr class="railroad"><td class="ks"></td><td class="d"><code class="c">BOOLEAN</code></td><td class="ke"></td></tr><tr class="railroad"><td class="ks"></td><td class="d"><code class="c">NAME</code></td><td class="ke"></td></tr><tr class="railroad"><td class="k
 s"></td><td class="d"><code class="c">PATH</code></td><td class="ke"></td></tr><tr class="railroad"><td class="ks"></td><td class="d"><code class="c">REFERENCE</code></td><td class="ke"></td></tr><tr class="railroad"><td class="ks"></td><td class="d"><code class="c">WEAKREFERENCE</code></td><td class="ke"></td></tr><tr class="railroad"><td class="ls"></td><td class="d"><code class="c">URI</code></td><td class="le"></td></tr></table>
 <p>This is the list of all JCR property types.</p>
 <hr />
-</div></div>
-<div class="section" id="options">
-<h3 id="options">Options</h3>
-
-<div class="section">
-<h4><a name="OPTION___TRAVERSAL__OK__WARN__FAIL__DEFAULT____INDEX_TAG_tagName_____...__"></a>
-OPTION( { 
-<br />&#160;&#160; TRAVERSAL { OK | WARN | FAIL | DEFAULT } | 
-<br />&#160;&#160; INDEX TAG tagName 
-<br /> } [ , ... ] )
-</h4>
+<h2><a name="options"></a>Options</h2><table class="railroad"><tr class="railroad"><td class="d"><code class="c">OPTION (</code></td><td class="d"><table class="railroad"><tr class="railroad"><td class="ts"></td><td class="d"><table class="railroad"><tr class="railroad"><td class="d"><code class="c">TRAVERSAL</code></td><td class="d"><table class="railroad"><tr class="railroad"><td class="ts"></td><td class="d"><code class="c">OK</code></td><td class="te"></td></tr><tr class="railroad"><td class="ks"></td><td class="d"><code class="c">WARN</code></td><td class="ke"></td></tr><tr class="railroad"><td class="ks"></td><td class="d"><code class="c">FAIL</code></td><td class="ke"></td></tr><tr class="railroad"><td class="ls"></td><td class="d"><code class="c">DEFAULT</code></td><td class="le"></td></tr></table></td></tr></table></td><td class="te"></td></tr><tr class="railroad"><td class="ls"></td><td class="d"><table class="railroad"><tr class="railroad"><td class="d"><code class="c">IN
 DEX TAG <a href="#name">tagName</a></code></td></tr></table></td><td class="le"></td></tr></table></td><td class="d"><table class="railroad"><tr class="railroad"><td class="ts"></td><td class="d">&nbsp;</td><td class="te"></td></tr><tr class="railroad"><td class="ls"></td><td class="d"><table class="railroad"><tr class="railroad"><td class="d"><code class="c">, ...</code></td></tr></table></td><td class="le"></td></tr></table></td><td class="d"><code class="c">)</code></td></tr></table>
 <p>&#x201c;traversal&#x201d;: by default, queries without index will log a warning, except if the configuration option <tt>QueryEngineSettings.failTraversal</tt> is changed The traversal option can be used to change the behavior of the given query: &#x201c;ok&#x201d; to not log a warning, &#x201c;warn&#x201d; to log a warning, &#x201c;fail&#x201d; to fail the query, and &#x201c;default&#x201d; to use the default setting.</p>
 <p>&#x201c;index tag&#x201d;: by default, queries will use the index with the lowest expected cost (as in relational databases). To only consider some of the indexes, add tags (a multi-valued String property) to the index(es) of choice, and specify this tag in the query.</p>
 <p>Examples:</p>
@@ -553,14 +426,7 @@ OPTION( {
 <div class="source"><pre class="prettyprint">option(traversal fail)
 </pre></div></div>
 <hr />
-</div></div>
-<div class="section" id="explain">
-<h3 id="explain">Explain Query</h3>
-
-<div class="section">
-<h4><a name="EXPLAIN_MEASURE__query_"></a>
-EXPLAIN [MEASURE] { <a href="#query">query</a> }
-</h4>
+<h2><a name="explain"></a>Explain</h2><table class="railroad"><tr class="railroad"><td class="d"><code class="c">EXPLAIN</code></td><td class="d"><table class="railroad"><tr class="railroad"><td class="ts"></td><td class="d">&nbsp;</td><td class="te"></td></tr><tr class="railroad"><td class="ls"></td><td class="d"><code class="c">MEASURE</code></td><td class="le"></td></tr></table></td><td class="d"><code class="c"><a href="#query">query</a></code></td></tr></table>
 <p>Does not run the query, but only computes and returns the query plan. With EXPLAIN MEASURE, the expected cost is calculated as well. In both cases, the query result will only have one column called &#x2018;plan&#x2019;, and one row that contains the plan.</p>
 <p>Examples:</p>
 
@@ -577,14 +443,7 @@ cost: { &quot;nt:base&quot;: 2.0 }
 </pre></div></div>
 <p>This means the property index named &#x201c;uuid&#x201d; is used for this query. The expected cost (roughly the number of uncached I/O operations) is 2.</p>
 <hr />
-</div></div>
-<div class="section" id="measure">
-<h3 id="measure">Measure</h3>
-
-<div class="section">
-<h4><a name="MEASURE__query_"></a>
-MEASURE { <a href="#query">query</a> }
-</h4>
+<h2><a name="measure"></a>Measure</h2><table class="railroad"><tr class="railroad"><td class="d"><code class="c">MEASURE <a href="#query">query</a></code></td></tr></table>
 <p>Runs the query, but instead of returning the result, returns the number of rows traversed. The query result has two columns, one called &#x2018;selector&#x2019; and one called &#x2018;scanCount&#x2019;. The result has at least two rows, one that represents the total (selector set to &#x2018;query&#x2019;), and one per selector used in the query. </p>
 <p>Examples:</p>
 
@@ -600,7 +459,7 @@ scanCount = 0
 selector = nt:base
 scanCount = 0
 </pre></div></div>
-<p>In this case, the scanCount is zero because the query did not find any nodes.</p></div></div></div>
+<p>In this case, the scanCount is zero because the query did not find any nodes.</p></div>
         </div>
       </div>
     </div>

Modified: jackrabbit/site/live/oak/docs/query/grammar-xpath.html
URL: http://svn.apache.org/viewvc/jackrabbit/site/live/oak/docs/query/grammar-xpath.html?rev=1824978&r1=1824977&r2=1824978&view=diff
==============================================================================
--- jackrabbit/site/live/oak/docs/query/grammar-xpath.html (original)
+++ jackrabbit/site/live/oak/docs/query/grammar-xpath.html Wed Feb 21 16:00:36 2018
@@ -1,13 +1,13 @@
 <!DOCTYPE html>
 <!--
- | Generated by Apache Maven Doxia Site Renderer 1.7.4 at 2018-02-13 
+ | Generated by Apache Maven Doxia Site Renderer 1.7.4 at 2018-02-21 
  | Rendered using Apache Maven Fluido Skin 1.6
 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180213" />
+    <meta name="Date-Revision-yyyymmdd" content="20180221" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Jackrabbit Oak &#x2013; Oak XPath Query Grammar - Oak Documentation</title>
     <link rel="stylesheet" href="../css/apache-maven-fluido-1.6.min.css" />
@@ -136,7 +136,7 @@
 
       <div id="breadcrumbs">
         <ul class="breadcrumb">
-        <li id="publishDate">Last Published: 2018-02-13<span class="divider">|</span>
+        <li id="publishDate">Last Published: 2018-02-21<span class="divider">|</span>
 </li>
           <li id="projectVersion">Version: 1.10-SNAPSHOT</li>
         </ul>

Modified: jackrabbit/site/live/oak/docs/query/index-management.html
URL: http://svn.apache.org/viewvc/jackrabbit/site/live/oak/docs/query/index-management.html?rev=1824978&r1=1824977&r2=1824978&view=diff
==============================================================================
--- jackrabbit/site/live/oak/docs/query/index-management.html (original)
+++ jackrabbit/site/live/oak/docs/query/index-management.html Wed Feb 21 16:00:36 2018
@@ -1,13 +1,13 @@
 <!DOCTYPE html>
 <!--
- | Generated by Apache Maven Doxia Site Renderer 1.7.4 at 2018-02-13 
+ | Generated by Apache Maven Doxia Site Renderer 1.7.4 at 2018-02-21 
  | Rendered using Apache Maven Fluido Skin 1.6
 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180213" />
+    <meta name="Date-Revision-yyyymmdd" content="20180221" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Jackrabbit Oak &#x2013; Index Management</title>
     <link rel="stylesheet" href="../css/apache-maven-fluido-1.6.min.css" />
@@ -136,7 +136,7 @@
 
       <div id="breadcrumbs">
         <ul class="breadcrumb">
-        <li id="publishDate">Last Published: 2018-02-13<span class="divider">|</span>
+        <li id="publishDate">Last Published: 2018-02-21<span class="divider">|</span>
 </li>
           <li id="projectVersion">Version: 1.10-SNAPSHOT</li>
         </ul>

Modified: jackrabbit/site/live/oak/docs/query/indexing.html
URL: http://svn.apache.org/viewvc/jackrabbit/site/live/oak/docs/query/indexing.html?rev=1824978&r1=1824977&r2=1824978&view=diff
==============================================================================
--- jackrabbit/site/live/oak/docs/query/indexing.html (original)
+++ jackrabbit/site/live/oak/docs/query/indexing.html Wed Feb 21 16:00:36 2018
@@ -1,13 +1,13 @@
 <!DOCTYPE html>
 <!--
- | Generated by Apache Maven Doxia Site Renderer 1.7.4 at 2018-02-13 
+ | Generated by Apache Maven Doxia Site Renderer 1.7.4 at 2018-02-21 
  | Rendered using Apache Maven Fluido Skin 1.6
 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180213" />
+    <meta name="Date-Revision-yyyymmdd" content="20180221" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Jackrabbit Oak &#x2013; Indexing</title>
     <link rel="stylesheet" href="../css/apache-maven-fluido-1.6.min.css" />
@@ -136,7 +136,7 @@
 
       <div id="breadcrumbs">
         <ul class="breadcrumb">
-        <li id="publishDate">Last Published: 2018-02-13<span class="divider">|</span>
+        <li id="publishDate">Last Published: 2018-02-21<span class="divider">|</span>
 </li>
           <li id="projectVersion">Version: 1.10-SNAPSHOT</li>
         </ul>

Modified: jackrabbit/site/live/oak/docs/query/lucene-old.html
URL: http://svn.apache.org/viewvc/jackrabbit/site/live/oak/docs/query/lucene-old.html?rev=1824978&r1=1824977&r2=1824978&view=diff
==============================================================================
--- jackrabbit/site/live/oak/docs/query/lucene-old.html (original)
+++ jackrabbit/site/live/oak/docs/query/lucene-old.html Wed Feb 21 16:00:36 2018
@@ -1,13 +1,13 @@
 <!DOCTYPE html>
 <!--
- | Generated by Apache Maven Doxia Site Renderer 1.7.4 at 2018-02-13 
+ | Generated by Apache Maven Doxia Site Renderer 1.7.4 at 2018-02-21 
  | Rendered using Apache Maven Fluido Skin 1.6
 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180213" />
+    <meta name="Date-Revision-yyyymmdd" content="20180221" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Jackrabbit Oak &#x2013; Lucene Index</title>
     <link rel="stylesheet" href="../css/apache-maven-fluido-1.6.min.css" />
@@ -136,7 +136,7 @@
 
       <div id="breadcrumbs">
         <ul class="breadcrumb">
-        <li id="publishDate">Last Published: 2018-02-13<span class="divider">|</span>
+        <li id="publishDate">Last Published: 2018-02-21<span class="divider">|</span>
 </li>
           <li id="projectVersion">Version: 1.10-SNAPSHOT</li>
         </ul>

Modified: jackrabbit/site/live/oak/docs/query/lucene.html
URL: http://svn.apache.org/viewvc/jackrabbit/site/live/oak/docs/query/lucene.html?rev=1824978&r1=1824977&r2=1824978&view=diff
==============================================================================
--- jackrabbit/site/live/oak/docs/query/lucene.html (original)
+++ jackrabbit/site/live/oak/docs/query/lucene.html Wed Feb 21 16:00:36 2018
@@ -1,13 +1,13 @@
 <!DOCTYPE html>
 <!--
- | Generated by Apache Maven Doxia Site Renderer 1.7.4 at 2018-02-13 
+ | Generated by Apache Maven Doxia Site Renderer 1.7.4 at 2018-02-21 
  | Rendered using Apache Maven Fluido Skin 1.6
 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180213" />
+    <meta name="Date-Revision-yyyymmdd" content="20180221" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Jackrabbit Oak &#x2013; Lucene Index</title>
     <link rel="stylesheet" href="../css/apache-maven-fluido-1.6.min.css" />
@@ -136,7 +136,7 @@
 
       <div id="breadcrumbs">
         <ul class="breadcrumb">
-        <li id="publishDate">Last Published: 2018-02-13<span class="divider">|</span>
+        <li id="publishDate">Last Published: 2018-02-21<span class="divider">|</span>
 </li>
           <li id="projectVersion">Version: 1.10-SNAPSHOT</li>
         </ul>

Modified: jackrabbit/site/live/oak/docs/query/oak-run-indexing.html
URL: http://svn.apache.org/viewvc/jackrabbit/site/live/oak/docs/query/oak-run-indexing.html?rev=1824978&r1=1824977&r2=1824978&view=diff
==============================================================================
--- jackrabbit/site/live/oak/docs/query/oak-run-indexing.html (original)
+++ jackrabbit/site/live/oak/docs/query/oak-run-indexing.html Wed Feb 21 16:00:36 2018
@@ -1,13 +1,13 @@
 <!DOCTYPE html>
 <!--
- | Generated by Apache Maven Doxia Site Renderer 1.7.4 at 2018-02-13 
+ | Generated by Apache Maven Doxia Site Renderer 1.7.4 at 2018-02-21 
  | Rendered using Apache Maven Fluido Skin 1.6
 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180213" />
+    <meta name="Date-Revision-yyyymmdd" content="20180221" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Jackrabbit Oak &#x2013; <a name="oak-run-indexing"></a> Oak Run Indexing</title>
     <link rel="stylesheet" href="../css/apache-maven-fluido-1.6.min.css" />
@@ -136,7 +136,7 @@
 
       <div id="breadcrumbs">
         <ul class="breadcrumb">
-        <li id="publishDate">Last Published: 2018-02-13<span class="divider">|</span>
+        <li id="publishDate">Last Published: 2018-02-21<span class="divider">|</span>
 </li>
           <li id="projectVersion">Version: 1.10-SNAPSHOT</li>
         </ul>