diff --git a/asterixdb/asterix-doc/pom.xml b/asterixdb/asterix-doc/pom.xml
index 963daec..83f82ad 100644
--- a/asterixdb/asterix-doc/pom.xml
+++ b/asterixdb/asterix-doc/pom.xml
@@ -55,10 +55,10 @@
                   <filelist dir="${project.basedir}/src/main/markdown/sqlpp" files="0_toc.md,1_intro.md,2_expr_title.md,2_expr.md,3_query_title.md,3_declare_dataverse.md,3_declare_function.md,3_query.md,4_error_title.md,4_error.md,5_ddl_head.md,5_ddl_dataset_index.md,5_ddl_function_removal.md,5_ddl_dml.md,appendix_1_title.md,appendix_1_keywords.md,appendix_2_title.md,appendix_2_parameters.md,appendix_2_index_only.md,appendix_3_title.md,appendix_3_resolution.md" />
                 </concat>
                 <concat destfile="${project.build.directory}/generated-site/markdown/sqlpp/builtins.md">
-                  <filelist dir="${project.basedir}/src/main/markdown/builtins" files="0_toc.md,1_numeric_common.md,1_numeric_delta.md,2_string_common.md,2_string_delta.md,3_binary.md,4_spatial.md,5_similarity.md,6_tokenizing.md,7_temporal.md,7_allens.md,8_record.md,9_aggregate_sql.md,10_comparison.md,11_type.md,13_conditional.md,12_misc.md,14_window.md,15_over.md" />
+                  <filelist dir="${project.basedir}/src/main/markdown/builtins" files="0_toc.md,0_toc_sqlpp.md,0_toc_common.md,1_numeric_common.md,1_numeric_delta.md,2_string_common.md,2_string_delta.md,3_binary.md,4_spatial.md,5_similarity.md,6_tokenizing.md,7_temporal.md,7_allens.md,8_record.md,9_aggregate_sql.md,10_comparison.md,11_type.md,13_conditional.md,12_misc.md,14_window.md" />
                 </concat>
                 <concat destfile="${project.build.directory}/generated-site/markdown/aql/builtins.md">
-                  <filelist dir="${project.basedir}/src/main/markdown/builtins" files="0_toc.md,1_numeric_common.md,1_numeric_delta.md,2_string_common.md,2_string_delta.md,3_binary.md,4_spatial.md,5_similarity.md,6_tokenizing.md,7_temporal.md,7_allens.md,8_record.md,9_aggregate_sql.md,10_comparison.md,11_type.md,13_conditional.md,12_misc.md" />
+                  <filelist dir="${project.basedir}/src/main/markdown/builtins" files="0_toc.md,0_toc_aql.md,0_toc_common.md,1_numeric_common.md,1_numeric_delta.md,2_string_common.md,2_string_delta.md,3_binary.md,4_spatial.md,5_similarity.md,6_tokenizing.md,7_temporal.md,7_allens.md,8_record.md,9_aggregate_sql.md,10_comparison.md,11_type.md,13_conditional.md,12_misc.md" />
                 </concat>
                 <concat destfile="${project.build.directory}/generated-site/markdown/datamodel.md">
                   <filelist dir="${project.basedir}/src/main/markdown/datamodel" files="datamodel_header.md,datamodel_primitive_common.md,datamodel_primitive_delta.md,datamodel_incomplete.md,datamodel_composite.md" />
diff --git a/asterixdb/asterix-doc/src/main/markdown/builtins/0_toc.md b/asterixdb/asterix-doc/src/main/markdown/builtins/0_toc.md
index 1a94577..c81c656 100644
--- a/asterixdb/asterix-doc/src/main/markdown/builtins/0_toc.md
+++ b/asterixdb/asterix-doc/src/main/markdown/builtins/0_toc.md
@@ -18,24 +18,3 @@
  !-->
 
 # Builtin Functions #
-
-## <a id="toc">Table of Contents</a> ##
-
-* [Numeric Functions](#NumericFunctions)
-* [String Functions](#StringFunctions)
-* [Binary Functions](#BinaryFunctions)
-* [Spatial Functions](#SpatialFunctions)
-* [Similarity Functions](#SimilarityFunctions)
-* [Tokenizing Functions](#TokenizingFunctions)
-* [Temporal Functions](#TemporalFunctions)
-* [Object Functions](#ObjectFunctions)
-* [Aggregate Functions (Array Functions)](#AggregateFunctions)
-* [Comparison Functions](#ComparisonFunctions)
-* [Type Functions](#TypeFunctions)
-* [Conditional Functions](#ConditionalFunctions)
-* [Miscellaneous Functions](#MiscFunctions)
-* [Window Functions](#WindowFunctions)
-* [OVER Clause (Window Function Calls)](#OverClause)
-
-The system provides various classes of functions to support operations on numeric, string, spatial, and temporal data.
-This document explains how to use these functions.
diff --git a/asterixdb/asterix-doc/src/main/markdown/builtins/0_toc_aql.md b/asterixdb/asterix-doc/src/main/markdown/builtins/0_toc_aql.md
new file mode 100644
index 0000000..f9e81dd
--- /dev/null
+++ b/asterixdb/asterix-doc/src/main/markdown/builtins/0_toc_aql.md
@@ -0,0 +1,34 @@
+<!--
+ ! 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.
+ !-->
+
+## <a id="toc">Table of Contents</a> ##
+
+* [Numeric Functions](#NumericFunctions)
+* [String Functions](#StringFunctions)
+* [Binary Functions](#BinaryFunctions)
+* [Spatial Functions](#SpatialFunctions)
+* [Similarity Functions](#SimilarityFunctions)
+* [Tokenizing Functions](#TokenizingFunctions)
+* [Temporal Functions](#TemporalFunctions)
+* [Object Functions](#ObjectFunctions)
+* [Aggregate Functions (Array Functions)](#AggregateFunctions)
+* [Comparison Functions](#ComparisonFunctions)
+* [Type Functions](#TypeFunctions)
+* [Conditional Functions](#ConditionalFunctions)
+* [Miscellaneous Functions](#MiscFunctions)
diff --git a/asterixdb/asterix-doc/src/main/markdown/builtins/0_toc_common.md b/asterixdb/asterix-doc/src/main/markdown/builtins/0_toc_common.md
new file mode 100644
index 0000000..c1a97cb
--- /dev/null
+++ b/asterixdb/asterix-doc/src/main/markdown/builtins/0_toc_common.md
@@ -0,0 +1,21 @@
+<!--
+ ! 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.
+ !-->
+
+The system provides various classes of functions to support operations on numeric, string, spatial, and temporal data.
+This document explains how to use these functions.
diff --git a/asterixdb/asterix-doc/src/main/markdown/builtins/0_toc_sqlpp.md b/asterixdb/asterix-doc/src/main/markdown/builtins/0_toc_sqlpp.md
new file mode 100644
index 0000000..7064b17
--- /dev/null
+++ b/asterixdb/asterix-doc/src/main/markdown/builtins/0_toc_sqlpp.md
@@ -0,0 +1,35 @@
+<!--
+ ! 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.
+ !-->
+
+## <a id="toc">Table of Contents</a> ##
+
+* [Numeric Functions](#NumericFunctions)
+* [String Functions](#StringFunctions)
+* [Binary Functions](#BinaryFunctions)
+* [Spatial Functions](#SpatialFunctions)
+* [Similarity Functions](#SimilarityFunctions)
+* [Tokenizing Functions](#TokenizingFunctions)
+* [Temporal Functions](#TemporalFunctions)
+* [Object Functions](#ObjectFunctions)
+* [Aggregate Functions (Array Functions)](#AggregateFunctions)
+* [Comparison Functions](#ComparisonFunctions)
+* [Type Functions](#TypeFunctions)
+* [Conditional Functions](#ConditionalFunctions)
+* [Miscellaneous Functions](#MiscFunctions)
+* [Window Functions](#WindowFunctions)
diff --git a/asterixdb/asterix-doc/src/main/markdown/builtins/14_window.md b/asterixdb/asterix-doc/src/main/markdown/builtins/14_window.md
index 64bcf17..adc5daa 100644
--- a/asterixdb/asterix-doc/src/main/markdown/builtins/14_window.md
+++ b/asterixdb/asterix-doc/src/main/markdown/builtins/14_window.md
@@ -28,7 +28,7 @@
 separate in the query output.
 
 All window functions must be used with an OVER clause.
-Refer to [OVER Clause](#OverClause) for details.
+Refer to [OVER Clauses](manual.html#Over_clauses) for details.
 
 Window functions cannot appear in the FROM clause clause or LIMIT clause.
 
@@ -52,9 +52,9 @@
 
 * Clauses:
 
-    * (Optional) [Window Partition Clause](#window-partition-clause).
+    * (Optional) [Window Partition Clause](manual.html#Window_partition_clause).
 
-    * (Required) [Window Order Clause](#window-order-clause).
+    * (Required) [Window Order Clause](manual.html#Window_order_clause).
 
 * Return Value:
 
@@ -122,13 +122,13 @@
   distinct tuples preceding this tuple in the current window partition, plus
   one.
 
-  The tuples are ordered by the window order clause.
-  If any tuples are tied, they will have the same rank.
+    The tuples are ordered by the window order clause.
+    If any tuples are tied, they will have the same rank.
 
-  For this function, when any tuples have the same rank, the rank of the next
-  tuple will be consecutive, so there will not be a gap in the sequence of
-  returned values.
-  For example, if there are three tuples ranked 2, the next dense rank is 3.
+    For this function, when any tuples have the same rank, the rank of the next
+    tuple will be consecutive, so there will not be a gap in the sequence of
+    returned values.
+    For example, if there are three tuples ranked 2, the next dense rank is 3.
 
 * Arguments:
 
@@ -136,9 +136,9 @@
 
 * Clauses:
 
-    * (Optional) [Window Partition Clause](#window-partition-clause).
+    * (Optional) [Window Partition Clause](manual.html#Window_partition_clause).
 
-    * (Required) [Window Order Clause](#window-order-clause).
+    * (Required) [Window Order Clause](manual.html#Window_order_clause).
 
 * Return Value:
 
@@ -209,8 +209,7 @@
         FIRST_VALUE(expr) [nulls-treatment] OVER (window-definition)
 
 * Returns the requested value from the first tuple in the current window
-  frame, where the window frame is specified by the [window
-  clause](#window-definition).
+  frame, where the window frame is specified by the window definition.
 
 * Arguments:
 
@@ -219,9 +218,9 @@
 
 * Modifiers:
 
-    * [Nulls Treatment](#nulls-treatment): (Optional) Determines how NULL or
-      MISSING values are treated when finding the first tuple in the window
-      frame.
+    * [Nulls Treatment](manual.html#Nulls_treatment): (Optional) Determines how
+      NULL or MISSING values are treated when finding the first tuple in the
+      window frame.
 
         - `IGNORE NULLS`: If the values for any tuples evaluate to NULL or
           MISSING, those tuples are ignored when finding the first tuple.
@@ -235,11 +234,11 @@
 
 * Clauses:
 
-    * (Optional) [Window Partition Clause](#window-partition-clause).
+    * (Optional) [Window Partition Clause](manual.html#Window_partition_clause).
 
-    * (Optional) [Window Order Clause](#window-order-clause).
+    * (Optional) [Window Order Clause](manual.html#Window_order_clause).
 
-    * (Optional) [Window Frame Clause](#window-frame-clause).
+    * (Optional) [Window Frame Clause](manual.html#Window_frame_clause).
 
 * Return Value:
 
@@ -346,9 +345,9 @@
 
 * Modifiers:
 
-    * [Nulls Treatment](#nulls-treatment): (Optional) Determines how NULL or
-      MISSING values are treated when finding the first tuple in the window
-      frame.
+    * [Nulls Treatment](manual.html#Nulls_treatment): (Optional) Determines how
+      NULL or MISSING values are treated when finding the first tuple in the
+      window frame.
 
         - `IGNORE NULLS`: If the values for any tuples evaluate to NULL or
           MISSING, those tuples are ignored when finding the first tuple.
@@ -362,9 +361,9 @@
 
 * Clauses:
 
-    * (Optional) [Window Partition Clause](#window-partition-clause).
+    * (Optional) [Window Partition Clause](manual.html#Window_partition_clause).
 
-    * (Required) [Window Order Clause](#window-order-clause).
+    * (Required) [Window Order Clause](manual.html#Window_order_clause).
 
 * Return Value:
 
@@ -449,9 +448,9 @@
 
 * Modifiers:
 
-    * [Nulls Treatment](#nulls-treatment): (Optional) Determines how NULL or
-      MISSING values are treated when finding the first tuple in the window
-      frame.
+    * [Nulls Treatment](manual.html#Nulls_treatment): (Optional) Determines how
+      NULL or MISSING values are treated when finding the first tuple in the
+      window frame.
 
         - `IGNORE NULLS`: If the values for any tuples evaluate to NULL or
           MISSING, those tuples are ignored when finding the first tuple.
@@ -465,11 +464,11 @@
 
 * Clauses:
 
-    * (Optional) [Window Partition Clause](#window-partition-clause).
+    * (Optional) [Window Partition Clause](manual.html#Window_partition_clause).
 
-    * (Optional) [Window Order Clause](#window-order-clause).
+    * (Optional) [Window Order Clause](manual.html#Window_order_clause).
 
-    * (Optional) [Window Frame Clause](#window-frame-clause).
+    * (Optional) [Window Frame Clause](manual.html#Window_frame_clause).
 
 * Return Value:
 
@@ -586,9 +585,9 @@
 
 * Modifiers:
 
-    * [Nulls Treatment](#nulls-treatment): (Optional) Determines how NULL or
-      MISSING values are treated when finding the first tuple in the window
-      frame.
+    * [Nulls Treatment](manual.html#Nulls_treatment): (Optional) Determines how
+      NULL or MISSING values are treated when finding the first tuple in the
+      window frame.
 
         - `IGNORE NULLS`: If the values for any tuples evaluate to NULL or
           MISSING, those tuples are ignored when finding the first tuple.
@@ -602,9 +601,9 @@
 
 * Clauses:
 
-    * (Optional) [Window Partition Clause](#window-partition-clause).
+    * (Optional) [Window Partition Clause](manual.html#Window_partition_clause).
 
-    * (Required) [Window Order Clause](#window-order-clause).
+    * (Required) [Window Order Clause](manual.html#Window_order_clause).
 
 * Return Value:
 
@@ -692,8 +691,8 @@
 
 * Modifiers:
 
-    * [Nth Val From](#nthval-from): (Optional) Determines where the function
-      starts counting the offset.
+    * [Nth Val From](manual.html#Nth_val_from): (Optional) Determines where the
+      function starts counting the offset.
 
         - `FROM FIRST`: Counting starts at the first tuple in the window frame.
           In this case, an offset of 1 is the first tuple in the window frame,
@@ -706,9 +705,9 @@
         The order of the tuples is determined by the window order clause.
         If this modifier is omitted, the default is `FROM FIRST`.
 
-    * [Nulls Treatment](#nulls-treatment): (Optional) Determines how NULL or
-      MISSING values are treated when finding the first tuple in the window
-      frame.
+    * [Nulls Treatment](manual.html#Nulls_treatment): (Optional) Determines how
+      NULL or MISSING values are treated when finding the first tuple in the
+      window frame.
 
         - `IGNORE NULLS`: If the values for any tuples evaluate to NULL or
           MISSING, those tuples are ignored when finding the first tuple.
@@ -722,11 +721,11 @@
 
 * Clauses:
 
-    * (Optional) [Window Partition Clause](#window-partition-clause).
+    * (Optional) [Window Partition Clause](manual.html#Window_partition_clause).
 
-    * (Optional) [Window Order Clause](#window-order-clause).
+    * (Optional) [Window Order Clause](manual.html#Window_order_clause).
 
-    * (Optional) [Window Frame Clause](#window-order-clause).
+    * (Optional) [Window Frame Clause](manual.html#Window_frame_clause).
 
 * Return Value:
 
@@ -915,9 +914,9 @@
 
 * Clauses:
 
-    * (Optional) [Window Partition Clause](#window-partition-clause).
+    * (Optional) [Window Partition Clause](manual.html#Window_partition_clause).
 
-    * (Required) [Window Order Clause](#window-order-clause).
+    * (Required) [Window Order Clause](manual.html#Window_order_clause).
 
 * Return Value:
 
@@ -990,9 +989,9 @@
 
 * Clauses:
 
-    * (Optional) [Window Partition Clause](#window-partition-clause).
+    * (Optional) [Window Partition Clause](manual.html#Window_partition_clause).
 
-    * (Required) [Window Order Clause](#window-order-clause).
+    * (Required) [Window Order Clause](manual.html#Window_order_clause).
 
 * Return Value:
 
@@ -1059,13 +1058,13 @@
 * Returns the rank of the current tuple – that is, the number of distinct
   tuples preceding this tuple in the current window partition, plus one.
 
-  The tuples are ordered by the window order clause.
-  If any tuples are tied, they will have the same rank.
+    The tuples are ordered by the window order clause.
+    If any tuples are tied, they will have the same rank.
 
-  When any tuples have the same rank, the rank of the next tuple will include
-  all preceding tuples, so there may be a gap in the sequence of returned
-  values.
-  For example, if there are three tuples ranked 2, the next rank is 5.
+    When any tuples have the same rank, the rank of the next tuple will include
+    all preceding tuples, so there may be a gap in the sequence of returned
+    values.
+    For example, if there are three tuples ranked 2, the next rank is 5.
 
 * Arguments:
 
@@ -1073,9 +1072,9 @@
 
 * Clauses:
 
-    * (Optional) [Window Partition Clause](#window-partition-clause).
+    * (Optional) [Window Partition Clause](manual.html#Window_partition_clause).
 
-    * (Required) [Window Order Clause](#window-order-clause).
+    * (Required) [Window Order Clause](manual.html#Window_order_clause).
 
 * Return Value:
 
@@ -1155,11 +1154,11 @@
 
 * Clauses:
 
-    * (Optional) [Window Partition Clause](#window-partition-clause).
+    * (Optional) [Window Partition Clause](manual.html#Window_partition_clause).
 
-    * (Optional) [Window Order Clause](#window-order-clause).
+    * (Optional) [Window Order Clause](manual.html#Window_order_clause).
 
-    * (Optional) [Window Frame Clause](#window-frame-clause).
+    * (Optional) [Window Frame Clause](manual.html#Window_frame_clause).
 
 * Return Value:
 
@@ -1231,8 +1230,9 @@
 * Returns a unique row number for every tuple in every window partition.
   In each window partition, the row numbering starts at 1.
 
-  The window order clause determines the sort order of the tuples.
-  If the window order clause is omitted, the return values may be unpredictable.
+    The window order clause determines the sort order of the tuples.
+    If the window order clause is omitted, the return values may be
+    unpredictable.
 
 * Arguments:
 
@@ -1240,9 +1240,9 @@
 
 * Clauses:
 
-    * (Optional) [Window Partition Clause](#window-partition-clause).
+    * (Optional) [Window Partition Clause](manual.html#Window_partition_clause).
 
-    * (Optional) [Window Order Clause](#window-order-clause).
+    * (Optional) [Window Order Clause](manual.html#Window_order_clause).
 
 * Return Value:
 
diff --git a/asterixdb/asterix-doc/src/main/markdown/builtins/15_over.md b/asterixdb/asterix-doc/src/main/markdown/builtins/15_over.md
deleted file mode 100644
index 67b409e..0000000
--- a/asterixdb/asterix-doc/src/main/markdown/builtins/15_over.md
+++ /dev/null
@@ -1,345 +0,0 @@
-<!--
- ! 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.
- !-->
-
-## <a id="OverClause">OVER Clause (Window Function Calls)</a> ##
-
-All window functions must have an OVER clause to define the window partitions,
-the order of tuples within those partitions, and the extent of the window frame.
-Some window functions take additional window options, which are specified by
-modifiers before the OVER clause.
-
-The query language has a dedicated set of window functions.
-Aggregate functions can also be used as window functions, when they are used
-with an OVER clause.
-
-### <a id="window-function-call">Window Function Call</a> ###
-
-    WindowFunctionCall ::= WindowFunctionType "(" WindowFunctionArguments ")"
-    (WindowFunctionOptions)? <OVER> (Variable <AS>)? "(" WindowClause ")"
-
-### <a id="window-function-type">Window Function Type</a> ###
-
-    WindowFunctionType ::= AggregateFunctions | WindowFunctions
-
-Refer to the [Aggregate Functions](#AggregateFunctions) section for a list of
-aggregate functions.
-
-Refer to the [Window Functions](#WindowFunctions) section for a list of window
-functions.
-
-### <a id="window-function-arguments">Window Function Arguments</a> ###
-
-    WindowFunctionArguments ::= ( (<DISTINCT>)? Expression |
-    (Expression ("," Expression ("," Expression)? )? )? )
-
-Refer to the [Aggregate Functions](#AggregateFunctions) section or the
-[Window Functions](#WindowFunctions) section for details of the arguments for
-individual functions.
-
-### <a id="window-function-options">Window Function Options</a> ###
-
-    WindowFunctionOptions ::= (NthValFrom)? (NullsTreatment)?
-
-Window function options cannot be used with [aggregate
-functions](#AggregateFunctions).
-
-Window function options can only be used with some [window
-functions](#WindowFunctions), as described below.
-
-#### <a id="nthval-from">Nth Val From</a> ####
-
-    NthValFrom ::= <FROM> ( <FIRST> | <LAST> )
-
-The **nth val from** modifier determines whether the computation begins at the
-first or last tuple in the window.
-
-This modifier can only be used with the `nth_value()` function.
-
-This modifier is optional.
-If omitted, the default setting is `FROM FIRST`.
-
-#### <a id="nulls-treatment">Nulls Treatment</a> ####
-
-    nulls-treatment ::= ( <RESPECT> | <IGNORE> ) <NULLS>
-
-The **nulls treatment** modifier determines whether NULL values are included in
-the computation, or ignored.
-MISSING values are treated the same way as NULL values.
-
-This modifier can only be used with the `first_value()`, `last_value()`,
-`nth_value()`, `lag()`, and `lead()` functions.
-
-This modifier is optional.
-If omitted, the default setting is `RESPECT NULLS`.
-
-### <a id="window-frame-variable">Window Frame Variable</a> ###
-
-The AS keyword enables you to specify an alias for the window frame contents.
-It introduces a variable which will be bound to the contents of the frame.
-When using a built-in [aggregate function](#AggregateFunctions) as a
-window function, the function’s argument must be a subquery which refers to
-this alias, for example:
-
-    FROM source AS src
-    SELECT ARRAY_COUNT(DISTINCT (FROM alias SELECT VALUE alias.src.field))
-    OVER alias AS (PARTITION BY … ORDER BY …)
-
-The alias is not necessary when using a [window function](#WindowFunctions),
-or when using a standard SQL aggregate function with the OVER clause.
-
-#### Standard SQL Aggregate Functions with the Window Clause ####
-
-A standard SQL aggregate function with an OVER clause is rewritten by the
-query compiler using a built-in aggregate function over a frame variable.
-For example, the following query with the `sum()` function:
-
-    FROM source AS src
-    SELECT SUM(field)
-    OVER (PARTITION BY … ORDER BY …)
-
-Is rewritten as the following query using the `array_sum()` function:
-
-    FROM source AS src
-    SELECT ARRAY_SUM( (FROM alias SELECT VALUE alias.src.field) )
-    OVER alias AS (PARTITION BY … ORDER BY …)
-
-This is similar to the way that standard SQL aggregate functions are rewritten
-as built-in aggregate functions in the presence of the GROUP BY clause.
-
-### <a id="window-definition">Window Definition</a> ###
-
-    WindowDefinition ::= (WindowPartitionClause)? (WindowOrderClause
-    (WindowFrameClause (WindowFrameExclusion)? )? )?
-
-The **window definition** specifies the partitioning, ordering, and framing for
-window functions.
-
-#### <a id="window-partition-clause">Window Partition Clause</a> ####
-
-    WindowPartitionClause ::= <PARTITION> <BY> Expression ("," Expression)*
-
-The **window partition clause** divides the tuples into partitions using
-one or more expressions.
-
-This clause may be used with any [window function](#WindowFunctions), or any
-[aggregate function](#AggregateFunctions) used as a window function.
-
-This clause is optional.
-If omitted, all tuples are united in a single partition.
-
-#### <a id="window-order-clause">Window Order Clause</a> ####
-
-    WindowOrderClause ::= <ORDER> <BY> OrderingTerm ("," OrderingTerm)*
-
-The **window order clause** determines how tuples are ordered within each
-partition.
-The window function works on tuples in the order specified by this clause.
-
-This clause may be used with any [window function](#WindowFunctions), or any
-[aggregate function](#AggregateFunctions) used as a window function.
-
-This clause is optional for some functions, and required for others.
-Refer to the [Aggregate Functions](#AggregateFunctions) section or the
-[Window Functions](#WindowFunctions) section for details of the syntax of
-individual functions.
-
-If this clause is omitted, all tuples are considered peers, i.e. their order
-is tied.
-When tuples in the window partition are tied, each window function behaves
-differently.
-
-* The `row_number()` function returns a distinct number for each tuple.
-  If tuples are tied, the results may be unpredictable.
-
-* The `rank()`, `dense_rank()`, `percent_rank()`, and `cume_dist()` functions
-  return the same result for each tuple.
-
-* For other functions, if the [window frame](#window-frame-clause) is
-  defined by `ROWS`, the results may be unpredictable.
-  If the window frame is defined by `RANGE` or `GROUPS`, the results are same
-  for each tuple.
-
-This clause may have multiple [ordering terms](#ordering-term).
-To reduce the number of ties, add additional [ordering terms](#ordering-term).
-
-##### NOTE #####
-
-This clause does not guarantee the overall order of the query results.
-To guarantee the order of the final results, use the query ORDER BY clause.
-
-#### <a id="ordering-term">Ordering Term</a> ####
-
-    OrderingTerm ::= Expression ( <ASC> | <DESC> )?
-
-The **ordering term** specifies an ordering expression and collation.
-
-This clause has the same syntax and semantics as the ordering term for queries.
-Refer to the [ORDER BY clause](manual.html#Order_By_clauses) section
-for details.
-
-#### <a id="window-frame-clause">Window Frame Clause</a> ####
-
-    WindowFrameClause ::= ( <ROWS> | <RANGE> | <GROUPS> ) WindowFrameExtent
-
-The **window frame clause** defines the window frame.
-
-This clause can be used with all [aggregate functions](#AggregateFunctions) and
-some [window functions](#WindowFunctions) — refer to the descriptions of
-individual functions for more details.
-
-This clause is allowed only when the [window order
-clause](#window-order-clause) is present.
-
-This clause is optional.
-
-* If this clause is omitted and there is no [window order
-  clause](#window-order-clause), the window frame is the entire partition.
-
-* If this clause is omitted but there is a [window order
-  clause](#window-order-clause), the window frame becomes all tuples
-  in the partition preceding the current tuple and its peers — the
-  same as `RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW`.
-
-The window frame can be defined in the following ways:
-
-* `ROWS`: Counts the exact number of tuples within the frame.
-  If window ordering doesn’t result in unique ordering, the function may
-  produce unpredictable results.
-  You can add a unique expression or more window ordering expressions to
-  produce unique ordering.
-
-* `RANGE`: Looks for a value offset within the frame.
-  The function produces deterministic results.
-
-* `GROUPS`: Counts all groups of tied rows within the frame.
-  The function produces deterministic results.
-
-##### NOTE #####
-
-If this clause uses `RANGE` with either `Expression PRECEDING` or
-`Expression FOLLOWING`, the [window order clause](#window-order-clause) must
-have only a single ordering term.
-The ordering term expression must evaluate to a number, a date, a time, or a
-datetime.
-If the ordering term expression evaluates to a date, a time, or a datetime, the
-expression in `Expression PRECEDING` or `Expression FOLLOWING` must evaluate to
-a duration.
-
-If these conditions are not met, the window frame will be empty,
-which means the window function will return its default
-value: in most cases this is NULL, except for `strict_count()` or
-`array_count()`, whose default value is 0.
-
-This restriction does not apply when the window frame uses `ROWS` or
-`GROUPS`.
-
-##### TIP #####
-
-The `RANGE` window frame is commonly used to define window frames based
-on date or time.
-
-If you want to use `RANGE` with either `Expression PRECEDING` or `Expression
-FOLLOWING`, and you want to use an ordering expression based on date or time,
-the expression in `Expression PRECEDING` or `Expression FOLLOWING` must use a
-data type that can be added to the ordering expression.
-
-#### <a id="window-frame-extent">Window Frame Extent</a> ####
-
-    WindowFrameExtent ::= ( <UNBOUNDED> <PRECEDING> | <CURRENT> <ROW> |
-    Expression <FOLLOWING> ) | <BETWEEN> ( <UNBOUNDED> <PRECEDING> | <CURRENT>
-    <ROW> | Expression ( <PRECEDING> | <FOLLOWING> ) ) <AND> ( <UNBOUNDED>
-    <FOLLOWING> | <CURRENT> <ROW> | Expression ( <PRECEDING> | <FOLLOWING> ) )
-
-The **window frame extent clause** specifies the start point and end point of
-the window frame.
-The expression before `AND` is the start point and the expression after `AND`
-is the end point.
-If `BETWEEN` is omitted, you can only specify the start point; the end point
-becomes `CURRENT ROW`.
-
-The window frame end point can’t be before the start point.
-If this clause violates this restriction explicitly, an error will result.
-If it violates this restriction implicitly, the window frame will be empty,
-which means the window function will return its default value:
-in most cases this is NULL, except for `strict_count()` or
-`array_count()`, whose default value is 0.
-
-Window frame extents that result in an explicit violation are:
-
-* `BETWEEN CURRENT ROW AND Expression PRECEDING`
-
-* `BETWEEN Expression FOLLOWING AND Expression PRECEDING`
-
-* `BETWEEN Expression FOLLOWING AND CURRENT ROW`
-
-Window frame extents that result in an implicit violation are:
-
-* `BETWEEN UNBOUNDED PRECEDING AND Expression PRECEDING` — if `Expression` is
-  too high, some tuples may generate an empty window frame.
-
-* `BETWEEN Expression PRECEDING AND Expression PRECEDING` — if the second
-  `Expression` is greater than or equal to the first `Expression`,
-  all result sets will generate an empty window frame.
-
-* `BETWEEN Expression FOLLOWING AND Expression FOLLOWING` — if the first
-  `Expression` is greater than or equal to the second `Expression`, all result
-  sets will generate an empty window frame.
-
-* `BETWEEN Expression FOLLOWING AND UNBOUNDED FOLLOWING` — if `Expression` is
-  too high, some tuples may generate an empty window frame.
-
-* If the [window frame exclusion clause](#window-frame-exclusion) is present,
-  any window frame specification may result in empty window frame.
-
-The `Expression` must be a positive constant or an expression that evaluates as
-a positive number.
-For `ROWS` or `GROUPS`, the `Expression` must be an integer.
-
-#### <a id="window-frame-exclusion">Window Frame Exclusion</a> ####
-
-    WindowFrameExclusion ::= <EXCLUDE> ( <CURRENT> <ROW> | <GROUP> | <TIES> |
-    <NO> <OTHERS> )
-
-The **window frame exclusion clause** enables you to exclude specified
-tuples from the window frame.
-
-This clause can be used with all [aggregate functions](#AggregateFunctions) and
-some [window functions](#WindowFunctions) — refer to the descriptions of
-individual functions for more details.
-
-This clause is allowed only when the [window frame
-clause](#window-frame-clause) is present.
-
-This clause is optional.
-If this clause is omitted, the default is no exclusion —
-the same as `EXCLUDE NO OTHERS`.
-
-* `EXCLUDE CURRENT ROW`: If the current tuple is still part of the window
-  frame, it is removed from the window frame.
-
-* `EXCLUDE GROUP`: The current tuple and any peers of the current tuple are
-  removed from the window frame.
-
-* `EXCLUDE TIES`: Any peers of the current tuple, but not the current tuple
-  itself, are removed from the window frame.
-
-* `EXCLUDE NO OTHERS`: No additional tuples are removed from the window frame.
-
-If the current tuple is already removed from the window frame, then it remains
-removed from the window frame.
diff --git a/asterixdb/asterix-doc/src/main/markdown/builtins/9_aggregate_sql.md b/asterixdb/asterix-doc/src/main/markdown/builtins/9_aggregate_sql.md
index b073225..93f6d9a 100644
--- a/asterixdb/asterix-doc/src/main/markdown/builtins/9_aggregate_sql.md
+++ b/asterixdb/asterix-doc/src/main/markdown/builtins/9_aggregate_sql.md
@@ -33,7 +33,7 @@
 Refer to [Aggregation Functions](manual.html#Aggregation_functions) for details.
 
 Aggregate functions may be used as window functions when they are used with an OVER clause.
-Refer to [OVER Clause](#OverClause) for details.
+Refer to [OVER Clauses](manual.html#Over_clauses) for details.
 
 ### array_count ###
  * Syntax:
diff --git a/asterixdb/asterix-doc/src/main/markdown/sqlpp/0_toc.md b/asterixdb/asterix-doc/src/main/markdown/sqlpp/0_toc.md
index c108cc0..1a5a3e6 100644
--- a/asterixdb/asterix-doc/src/main/markdown/sqlpp/0_toc.md
+++ b/asterixdb/asterix-doc/src/main/markdown/sqlpp/0_toc.md
@@ -71,6 +71,11 @@
       * [WITH Clauses](#With_clauses)
       * [LET Clauses](#Let_clauses)
       * [UNION ALL](#Union_all)
+      * [OVER Clauses](#Over_clauses)
+           * [Window Function Call](#Window_function_call)
+           * [Window Function Options](#Window_function_options)
+           * [Window Frame Variable](#Window_frame_variable)
+           * [Window Definition](#Window_definition)
       * [Differences from SQL-92](#Vs_SQL-92)
 * [4. Errors](#Errors)
       * [Syntax Errors](#Syntax_errors)
diff --git a/asterixdb/asterix-doc/src/main/markdown/sqlpp/2_expr.md b/asterixdb/asterix-doc/src/main/markdown/sqlpp/2_expr.md
index efc2a86..37e7f79 100644
--- a/asterixdb/asterix-doc/src/main/markdown/sqlpp/2_expr.md
+++ b/asterixdb/asterix-doc/src/main/markdown/sqlpp/2_expr.md
@@ -250,7 +250,7 @@
                   | CaseExpression
                   | Constructor
 
-The most basic building block for any expression in the query langauge is PrimaryExpression.
+The most basic building block for any expression in the query language is PrimaryExpression.
 This can be a simple literal (constant) value, a reference to a query variable that is in scope, a parenthesized
 expression, a function call, or a newly constructed instance of the data model (such as a newly constructed object,
 array, or multiset of data model instances).
@@ -386,7 +386,7 @@
 
 ### <a id="Function_call_expressions">Function Call Expressions</a>
 
-    FunctionCallExpression ::= FunctionName "(" ( Expression ( "," Expression )* )? ")"
+    FunctionCallExpression ::= ( FunctionName "(" ( Expression ( "," Expression )* )? ")" ) | WindowFunctionCall
 
 Functions are included in the query language, like most languages, as a way to package useful functionality or to
 componentize complicated or reusable computations.
@@ -394,6 +394,9 @@
 expression with the given parameter bindings; the parameter value bindings can themselves be any expressions in the
 query language.
 
+Note that Window functions, and aggregate functions used as window functions, have a more complex syntax.
+Window function calls are described in the section on [OVER Clauses](#Over_clauses).
+
 The following example is a (built-in) function call expression whose value is 8.
 
 ##### Example
diff --git a/asterixdb/asterix-doc/src/main/markdown/sqlpp/3_query.md b/asterixdb/asterix-doc/src/main/markdown/sqlpp/3_query.md
index 9f9db63..f4b5f3d 100644
--- a/asterixdb/asterix-doc/src/main/markdown/sqlpp/3_query.md
+++ b/asterixdb/asterix-doc/src/main/markdown/sqlpp/3_query.md
@@ -1661,7 +1661,7 @@
 UNION ALL can be used to combine two input arrays or multisets into one. As in SQL, there is no ordering guarantee
 on the contents of the output stream.
 However, unlike SQL, the query language does not constrain what the data looks like on the input streams; in particular,
-it allows heterogenity on the input and output streams.
+it allows heterogeneity on the input and output streams.
 A type error will be raised if one of the inputs is not a collection.
 The following odd but legal query is an example:
 
@@ -1684,6 +1684,336 @@
     }, " like product-y the plan is amazing"
      ]
 
+## <a id="Over_clauses">OVER Clauses</a> ##
+
+All window functions must have an OVER clause to define the window partitions,
+the order of tuples within those partitions, and the extent of the window frame.
+Some window functions take additional window options, which are specified by
+modifiers before the OVER clause.
+
+The query language has a dedicated set of window functions.
+Aggregate functions can also be used as window functions, when they are used
+with an OVER clause.
+
+### <a id="Window_function_call">Window Function Call</a> ###
+
+    WindowFunctionCall ::= WindowFunctionType "(" WindowFunctionArguments ")"
+    (WindowFunctionOptions)? <OVER> (Variable <AS>)? "(" WindowClause ")"
+
+#### <a id="Window_function_type">Window Function Type</a> ####
+
+    WindowFunctionType ::= AggregateFunctions | WindowFunctions
+
+Refer to the [Aggregate Functions](builtins.html#AggregateFunctions) section
+for a list of aggregate functions.
+
+Refer to the [Window Functions](builtins.html#WindowFunctions) section for a
+list of window functions.
+
+#### <a id="Window_function_arguments">Window Function Arguments</a> ####
+
+    WindowFunctionArguments ::= ( (<DISTINCT>)? Expression |
+    (Expression ("," Expression ("," Expression)? )? )? )
+
+Refer to the [Aggregate Functions](builtins.html#AggregateFunctions) section or
+the [Window Functions](builtins.html#WindowFunctions) section for details of
+the arguments for individual functions.
+
+### <a id="Window_function_options">Window Function Options</a> ###
+
+    WindowFunctionOptions ::= (NthValFrom)? (NullsTreatment)?
+
+Window function options cannot be used with [aggregate
+functions](builtins.html#AggregateFunctions).
+
+Window function options can only be used with some [window
+functions](builtins.html#WindowFunctions), as described below.
+
+#### <a id="Nth_val_from">Nth Val From</a> ####
+
+    NthValFrom ::= <FROM> ( <FIRST> | <LAST> )
+
+The **nth val from** modifier determines whether the computation begins at the
+first or last tuple in the window.
+
+This modifier can only be used with the `nth_value()` function.
+
+This modifier is optional.
+If omitted, the default setting is `FROM FIRST`.
+
+#### <a id="Nulls_treatment">Nulls Treatment</a> ####
+
+    NullsTreatment ::= ( <RESPECT> | <IGNORE> ) <NULLS>
+
+The **nulls treatment** modifier determines whether NULL values are included in
+the computation, or ignored.
+MISSING values are treated the same way as NULL values.
+
+This modifier can only be used with the `first_value()`, `last_value()`,
+`nth_value()`, `lag()`, and `lead()` functions.
+
+This modifier is optional.
+If omitted, the default setting is `RESPECT NULLS`.
+
+### <a id="Window_frame_variable">Window Frame Variable</a> ###
+
+The AS keyword enables you to specify an alias for the window frame contents.
+It introduces a variable which will be bound to the contents of the frame.
+When using a built-in [aggregate function](builtins.html#AggregateFunctions) as
+a window function, the function’s argument must be a subquery which refers to
+this alias, for example:
+
+    FROM source AS src
+    SELECT ARRAY_COUNT(DISTINCT (FROM alias SELECT VALUE alias.src.field))
+    OVER alias AS (PARTITION BY … ORDER BY …)
+
+The alias is not necessary when using a [window function](builtins.html#WindowFunctions),
+or when using a standard SQL aggregate function with the OVER clause.
+
+#### <a id="SQL-92_over_clause">Standard SQL Aggregate Functions with the OVER Clause</a> ####
+
+A standard SQL aggregate function with an OVER clause is rewritten by the
+query compiler using a built-in aggregate function over a frame variable.
+For example, the following query with the `sum()` function:
+
+    FROM source AS src
+    SELECT SUM(field)
+    OVER (PARTITION BY … ORDER BY …)
+
+Is rewritten as the following query using the `array_sum()` function:
+
+    FROM source AS src
+    SELECT ARRAY_SUM( (FROM alias SELECT VALUE alias.src.field) )
+    OVER alias AS (PARTITION BY … ORDER BY …)
+
+This is similar to the way that standard SQL aggregate functions are rewritten
+as built-in aggregate functions in the presence of the GROUP BY clause.
+
+### <a id="Window_definition">Window Definition</a> ###
+
+    WindowDefinition ::= (WindowPartitionClause)? (WindowOrderClause
+    (WindowFrameClause (WindowFrameExclusion)? )? )?
+
+The **window definition** specifies the partitioning, ordering, and framing for
+window functions.
+
+#### <a id="Window_partition_clause">Window Partition Clause</a> ####
+
+    WindowPartitionClause ::= <PARTITION> <BY> Expression ("," Expression)*
+
+The **window partition clause** divides the tuples into partitions using
+one or more expressions.
+
+This clause may be used with any [window function](builtins.html#WindowFunctions),
+or any [aggregate function](builtins.html#AggregateFunctions) used as a window
+function.
+
+This clause is optional.
+If omitted, all tuples are united in a single partition.
+
+#### <a id="Window_order_clause">Window Order Clause</a> ####
+
+    WindowOrderClause ::= <ORDER> <BY> OrderingTerm ("," OrderingTerm)*
+
+The **window order clause** determines how tuples are ordered within each
+partition.
+The window function works on tuples in the order specified by this clause.
+
+This clause may be used with any [window function](builtins.html#WindowFunctions),
+or any [aggregate function](builtins.html#AggregateFunctions) used as a window
+function.
+
+This clause is optional for some functions, and required for others.
+Refer to the [Aggregate Functions](builtins.html#AggregateFunctions) section or
+the [Window Functions](builtins.html#WindowFunctions) section for details of
+the syntax of individual functions.
+
+If this clause is omitted, all tuples are considered peers, i.e. their order
+is tied.
+When tuples in the window partition are tied, each window function behaves
+differently.
+
+* The `row_number()` function returns a distinct number for each tuple.
+  If tuples are tied, the results may be unpredictable.
+
+* The `rank()`, `dense_rank()`, `percent_rank()`, and `cume_dist()` functions
+  return the same result for each tuple.
+
+* For other functions, if the [window frame](#Window_frame_clause) is
+  defined by `ROWS`, the results may be unpredictable.
+  If the window frame is defined by `RANGE` or `GROUPS`, the results are same
+  for each tuple.
+
+This clause may have multiple [ordering terms](#Ordering_term).
+To reduce the number of ties, add additional [ordering terms](#Ordering_term).
+
+##### Note #####
+
+This clause does not guarantee the overall order of the query results.
+To guarantee the order of the final results, use the query ORDER BY clause.
+
+#### <a id="Ordering_term">Ordering Term</a> ####
+
+    OrderingTerm ::= Expression ( <ASC> | <DESC> )?
+
+The **ordering term** specifies an ordering expression and collation.
+
+This clause has the same syntax and semantics as the ordering term for queries.
+Refer to the [ORDER BY Clauses](#Order_By_clauses) section for details.
+
+#### <a id="Window_frame_clause">Window Frame Clause</a> ####
+
+    WindowFrameClause ::= ( <ROWS> | <RANGE> | <GROUPS> ) WindowFrameExtent
+
+The **window frame clause** defines the window frame.
+
+This clause can be used with all
+[aggregate functions](builtins.html#AggregateFunctions)
+and some [window functions](builtins.html#WindowFunctions) —
+refer to the descriptions of individual functions for more details.
+
+This clause is allowed only when the [window order
+clause](#Window_order_clause) is present.
+
+This clause is optional.
+
+* If this clause is omitted and there is no [window order
+  clause](#Window_order_clause), the window frame is the entire partition.
+
+* If this clause is omitted but there is a [window order
+  clause](#Window_order_clause), the window frame becomes all tuples
+  in the partition preceding the current tuple and its peers — the
+  same as `RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW`.
+
+The window frame can be defined in the following ways:
+
+* `ROWS`: Counts the exact number of tuples within the frame.
+  If window ordering doesn’t result in unique ordering, the function may
+  produce unpredictable results.
+  You can add a unique expression or more window ordering expressions to
+  produce unique ordering.
+
+* `RANGE`: Looks for a value offset within the frame.
+  The function produces deterministic results.
+
+* `GROUPS`: Counts all groups of tied rows within the frame.
+  The function produces deterministic results.
+
+##### Note #####
+
+If this clause uses `RANGE` with either `Expression PRECEDING` or
+`Expression FOLLOWING`, the [window order clause](#Window_order_clause) must
+have only a single ordering term.
+The ordering term expression must evaluate to a number, a date, a time, or a
+datetime.
+If the ordering term expression evaluates to a date, a time, or a datetime, the
+expression in `Expression PRECEDING` or `Expression FOLLOWING` must evaluate to
+a duration.
+
+If these conditions are not met, the window frame will be empty,
+which means the window function will return its default
+value: in most cases this is NULL, except for `strict_count()` or
+`array_count()`, whose default value is 0.
+
+This restriction does not apply when the window frame uses `ROWS` or
+`GROUPS`.
+
+##### Tip #####
+
+The `RANGE` window frame is commonly used to define window frames based
+on date or time.
+
+If you want to use `RANGE` with either `Expression PRECEDING` or `Expression
+FOLLOWING`, and you want to use an ordering expression based on date or time,
+the expression in `Expression PRECEDING` or `Expression FOLLOWING` must use a
+data type that can be added to the ordering expression.
+
+#### <a id="Window_frame_extent">Window Frame Extent</a> ####
+
+    WindowFrameExtent ::= ( <UNBOUNDED> <PRECEDING> | <CURRENT> <ROW> |
+    Expression <FOLLOWING> ) | <BETWEEN> ( <UNBOUNDED> <PRECEDING> | <CURRENT>
+    <ROW> | Expression ( <PRECEDING> | <FOLLOWING> ) ) <AND> ( <UNBOUNDED>
+    <FOLLOWING> | <CURRENT> <ROW> | Expression ( <PRECEDING> | <FOLLOWING> ) )
+
+The **window frame extent clause** specifies the start point and end point of
+the window frame.
+The expression before `AND` is the start point and the expression after `AND`
+is the end point.
+If `BETWEEN` is omitted, you can only specify the start point; the end point
+becomes `CURRENT ROW`.
+
+The window frame end point can’t be before the start point.
+If this clause violates this restriction explicitly, an error will result.
+If it violates this restriction implicitly, the window frame will be empty,
+which means the window function will return its default value:
+in most cases this is NULL, except for `strict_count()` or
+`array_count()`, whose default value is 0.
+
+Window frame extents that result in an explicit violation are:
+
+* `BETWEEN CURRENT ROW AND Expression PRECEDING`
+
+* `BETWEEN Expression FOLLOWING AND Expression PRECEDING`
+
+* `BETWEEN Expression FOLLOWING AND CURRENT ROW`
+
+Window frame extents that result in an implicit violation are:
+
+* `BETWEEN UNBOUNDED PRECEDING AND Expression PRECEDING` — if `Expression` is
+  too high, some tuples may generate an empty window frame.
+
+* `BETWEEN Expression PRECEDING AND Expression PRECEDING` — if the second
+  `Expression` is greater than or equal to the first `Expression`,
+  all result sets will generate an empty window frame.
+
+* `BETWEEN Expression FOLLOWING AND Expression FOLLOWING` — if the first
+  `Expression` is greater than or equal to the second `Expression`, all result
+  sets will generate an empty window frame.
+
+* `BETWEEN Expression FOLLOWING AND UNBOUNDED FOLLOWING` — if `Expression` is
+  too high, some tuples may generate an empty window frame.
+
+* If the [window frame exclusion clause](#Window_frame_exclusion) is present,
+  any window frame specification may result in empty window frame.
+
+The `Expression` must be a positive constant or an expression that evaluates as
+a positive number.
+For `ROWS` or `GROUPS`, the `Expression` must be an integer.
+
+#### <a id="Window_frame_exclusion">Window Frame Exclusion</a> ####
+
+    WindowFrameExclusion ::= <EXCLUDE> ( <CURRENT> <ROW> | <GROUP> | <TIES> |
+    <NO> <OTHERS> )
+
+The **window frame exclusion clause** enables you to exclude specified
+tuples from the window frame.
+
+This clause can be used with all
+[aggregate functions](builtins.html#AggregateFunctions)
+and some [window functions](builtins.html#WindowFunctions) —
+refer to the descriptions of individual functions for more details.
+
+This clause is allowed only when the [window frame
+clause](#Window_frame_clause) is present.
+
+This clause is optional.
+If this clause is omitted, the default is no exclusion —
+the same as `EXCLUDE NO OTHERS`.
+
+* `EXCLUDE CURRENT ROW`: If the current tuple is still part of the window
+  frame, it is removed from the window frame.
+
+* `EXCLUDE GROUP`: The current tuple and any peers of the current tuple are
+  removed from the window frame.
+
+* `EXCLUDE TIES`: Any peers of the current tuple, but not the current tuple
+  itself, are removed from the window frame.
+
+* `EXCLUDE NO OTHERS`: No additional tuples are removed from the window frame.
+
+If the current tuple is already removed from the window frame, then it remains
+removed from the window frame.
+
 ## <a id="Subqueries">Subqueries</a>
 In the query language, an arbitrary subquery can appear anywhere that an expression can appear.
 Unlike SQL-92, as was just alluded to, the subqueries in a SELECT list or a boolean predicate need
