[ASTERIXDB-2488][COMP] Support aggregate window functions

- user model changes: yes
- storage format changes: no
- interface changes: no

Details:
- Implement aggregate window functions:
  agg_func() OVER (frame_var AS)? (PARTITION BY ... ORDER BY ... frame_spec)
- Where agg_func is a SQL/SQL++ aggregate function
- Fix percent_rank() to always return 0 for the first tuple
- Fix ntile() to handle NULL argument
- Log query after each rewrite rule in SqlppQueryRewriter
- Implement toString() for ADayTimeDuration, fix it for AYearMonthDuration
- Add seek() method to RunFileReader

Change-Id: If0f71118a04c2dbd3462070673d52e67f076b7e1
Reviewed-on: https://asterix-gerrit.ics.uci.edu/3049
Tested-by: Jenkins <[email protected]>
Integration-Tests: Jenkins <[email protected]>
Contrib: Jenkins <[email protected]>
Reviewed-by: Ali Alsuliman <[email protected]>


Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo
Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/f2c18aa9
Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/f2c18aa9
Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/f2c18aa9

Branch: refs/heads/master
Commit: f2c18aa9646238ab2487ce3a964edfe3e61dd6e1
Parents: 1cd58bc
Author: Dmitry Lychagin <[email protected]>
Authored: Fri Dec 28 21:20:23 2018 -0800
Committer: Dmitry Lychagin <[email protected]>
Committed: Thu Jan 3 13:02:44 2019 -0800

----------------------------------------------------------------------
 asterixdb/LICENSE                               |    32 +
 .../InjectTypeCastForFunctionArgumentsRule.java |     1 +
 .../rules/SetAsterixPhysicalOperatorsRule.java  |    25 +-
 .../SweepIllegalNonfunctionalFunctions.java     |    33 +-
 .../subplan/InlineAllNtsInSubplanVisitor.java   |    14 +-
 .../LangExpressionToPlanTranslator.java         |    85 +-
 .../SqlppExpressionToPlanTranslator.java        |   530 +-
 asterixdb/asterix-app/data/tenk.tbl             | 10000 +++++++++++++++++
 .../app/resource/OperatorResourcesComputer.java |     8 +-
 .../optimizerts/queries/window/window_02.sqlpp  |    39 +
 .../optimizerts/results/ASTERIXDB-2402.plan     |    38 +-
 .../results/aggregate/constant-gby-agg.plan     |     6 +-
 .../results/aggregate/serial-agg.plan           |     6 +-
 ...n-probe-pidx-with-join-btree-sidx_01_ps.plan |    16 +-
 ...join-probe-pidx-with-join-btree-sidx_02.plan |    10 +-
 ...n-probe-pidx-with-join-btree-sidx_02_ps.plan |    20 +-
 .../btree-index-join/primary-equi-join_04.plan  |     4 +-
 .../secondary-equi-join-multiindex.plan         |     2 +-
 .../secondary-equi-join_02.plan                 |     2 +-
 .../secondary-equi-join_03.plan                 |     2 +-
 .../secondary-equi-join_04.plan                 |     8 +-
 .../secondary-equi-join_05.plan                 |     2 +-
 .../secondary-equi-join_06.plan                 |     8 +-
 .../results/btree-index/btree-secondary-33.plan |     2 +-
 .../results/btree-index/btree-secondary-34.plan |     2 +-
 .../results/btree-index/btree-secondary-35.plan |     2 +-
 .../results/btree-index/btree-secondary-36.plan |     2 +-
 .../results/btree-index/btree-secondary-40.plan |     2 +-
 .../results/btree-index/btree-secondary-42.plan |     2 +-
 .../results/btree-index/btree-secondary-43.plan |     2 +-
 .../results/btree-index/btree-secondary-44.plan |     2 +-
 .../results/btree-index/btree-secondary-45.plan |     2 +-
 .../results/btree-index/btree-secondary-46.plan |     2 +-
 .../results/btree-index/btree-secondary-47.plan |     2 +-
 .../results/btree-index/btree-secondary-48.plan |     2 +-
 .../results/btree-index/btree-secondary-49.plan |     2 +-
 .../results/btree-index/btree-secondary-51.plan |     2 +-
 .../results/btree-index/btree-secondary-52.plan |     2 +-
 .../results/btree-index/btree-secondary-53.plan |     2 +-
 .../results/btree-index/btree-secondary-54.plan |     2 +-
 .../results/btree-index/btree-secondary-55.plan |     2 +-
 .../results/btree-index/btree-secondary-56.plan |     2 +-
 .../results/btree-index/btree-secondary-57.plan |     2 +-
 .../results/btree-index/btree-secondary-58.plan |     2 +-
 .../results/btree-index/btree-secondary-59.plan |     2 +-
 .../results/btree-index/btree-secondary-60.plan |     2 +-
 .../results/btree-index/btree-secondary-61.plan |     2 +-
 .../results/btree-index/btree-secondary-62.plan |     2 +-
 .../results/btree-index/btree-secondary-63.plan |     2 +-
 .../results/btree-index/btree-secondary-68.plan |     8 +-
 .../btree-index/btree-secondary-68_ps.plan      |    12 +-
 .../btree-sidx-idxonly-01-disable-idxonly.plan  |     4 +-
 ...tree-sidx-idxonly-01-disable-idxonly_ps.plan |     8 +-
 .../btree-index/btree-sidx-idxonly-01.plan      |     4 +-
 .../btree-index/btree-sidx-idxonly-01_ps.plan   |     4 +-
 .../optimizerts/results/collocated.plan         |     2 +-
 .../optimizerts/results/cust_group_no_agg.plan  |     4 +-
 .../optimizerts/results/denorm-cust-order.plan  |     8 +-
 .../results/disjunction-to-join-delete-3.plan   |     2 +-
 ...rted-btree-search-return-optional-field.plan |     8 +-
 .../optimizerts/results/fj-dblp-csx-hybrid.plan |    73 +-
 .../optimizerts/results/fj-dblp-csx-star.plan   |   354 +-
 .../results/gby_partitioning_property_01.plan   |    10 +-
 .../results/group-by/sugar-06-distinct.plan     |    14 +-
 .../results/hints/broadcast_hint_1.plan         |     2 +-
 .../results/hints/broadcast_hint_2.plan         |     2 +-
 .../results/hints/broadcast_hint_3.plan         |     6 +-
 .../insert-and-scan-dataset-with-index.plan     |     9 +-
 .../results/insert-and-scan-dataset.plan        |     2 +-
 .../results/introhashpartitionmerge.plan        |    10 +-
 .../ngram-contains-panic.plan                   |     2 +-
 .../ngram-contains-panic_ps.plan                |     4 +-
 .../inverted-index-basic/ngram-contains.plan    |     4 +-
 .../inverted-index-basic/ngram-contains_ps.plan |     8 +-
 .../ngram-edit-distance-check.plan              |     2 +-
 .../ngram-edit-distance.plan                    |     2 +-
 .../ngram-fuzzyeq-edit-distance.plan            |     2 +-
 .../ngram-fuzzyeq-jaccard.plan                  |     2 +-
 .../ngram-jaccard-check.plan                    |     2 +-
 .../inverted-index-basic/ngram-jaccard.plan     |     2 +-
 .../olist-edit-distance-check-panic.plan        |     2 +-
 .../olist-edit-distance-check-panic_ps.plan     |     4 +-
 .../olist-edit-distance-check.plan              |     4 +-
 .../olist-edit-distance-check_ps.plan           |     8 +-
 .../olist-edit-distance-panic.plan              |     2 +-
 .../olist-edit-distance-panic_ps.plan           |     4 +-
 .../olist-edit-distance.plan                    |     4 +-
 .../olist-edit-distance_ps.plan                 |     8 +-
 .../olist-fuzzyeq-edit-distance.plan            |     4 +-
 .../olist-fuzzyeq-edit-distance_ps.plan         |     8 +-
 .../olist-fuzzyeq-jaccard.plan                  |     2 +-
 .../olist-jaccard-check.plan                    |     2 +-
 .../inverted-index-basic/olist-jaccard.plan     |     2 +-
 .../ulist-fuzzyeq-jaccard.plan                  |     2 +-
 .../ulist-jaccard-check.plan                    |     2 +-
 .../inverted-index-basic/ulist-jaccard.plan     |     2 +-
 .../inverted-index-basic/word-contains.plan     |     2 +-
 .../inverted-index-basic/word-contains_ps.plan  |     4 +-
 .../word-fuzzyeq-jaccard.plan                   |     2 +-
 .../word-jaccard-check.plan                     |     2 +-
 .../inverted-index-basic/word-jaccard.plan      |     2 +-
 ...dit-distance-check-let-panic-nopanic_01.plan |     2 +-
 ...dit-distance-check-let-panic-nopanic_02.plan |     2 +-
 .../ngram-edit-distance-check-let.plan          |     2 +-
 .../ngram-edit-distance-check-substring.plan    |     2 +-
 .../ngram-jaccard-check-let.plan                |     2 +-
 .../ngram-jaccard-check-multi-let.plan          |     2 +-
 .../olist-edit-distance-check-let-panic.plan    |     2 +-
 .../olist-edit-distance-check-let-panic_ps.plan |     4 +-
 .../olist-edit-distance-check-let.plan          |     4 +-
 .../olist-edit-distance-check-let_ps.plan       |     8 +-
 .../olist-jaccard-check-let.plan                |     2 +-
 .../ulist-jaccard-check-let.plan                |     2 +-
 .../word-jaccard-check-let.plan                 |     2 +-
 .../word-jaccard-check-multi-let.plan           |     2 +-
 .../ngram-edit-distance-inline.plan             |     2 +-
 .../ngram-fuzzyeq-edit-distance.plan            |     2 +-
 .../ngram-jaccard-inline.plan                   |    32 +-
 .../olist-edit-distance-inline.plan             |     2 +-
 .../olist-jaccard-inline.plan                   |     2 +-
 .../ulist-jaccard-inline.plan                   |     2 +-
 .../word-jaccard-inline.plan                    |    32 +-
 .../results/inverted-index-join/issue741.plan   |    36 +-
 ...dx-with-join-edit-distance-check-idx_01.plan |    14 +-
 ...with-join-edit-distance-check-idx_01_ps.plan |    28 +-
 ...obe-pidx-with-join-jaccard-check-idx_01.plan |    38 +-
 ...-pidx-with-join-jaccard-check-idx_01_ps.plan |    76 +-
 .../inverted-index-join/ngram-contains_ps.plan  |     8 +-
 .../ngram-edit-distance-check_02.plan           |     6 +-
 .../ngram-edit-distance-check_03.plan           |     6 +-
 .../ngram-edit-distance-check_04.plan           |     6 +-
 .../ngram-edit-distance_02.plan                 |     6 +-
 .../ngram-edit-distance_03.plan                 |     6 +-
 .../ngram-edit-distance_04.plan                 |     6 +-
 .../ngram-fuzzyeq-edit-distance_01.plan         |     6 +-
 .../ngram-fuzzyeq-edit-distance_03.plan         |     6 +-
 .../ngram-fuzzyeq-jaccard_02.plan               |    32 +-
 .../ngram-fuzzyeq-jaccard_03.plan               |    32 +-
 .../ngram-jaccard-check_02.plan                 |    32 +-
 .../ngram-jaccard-check_03.plan                 |    32 +-
 .../ngram-jaccard-check_04.plan                 |    32 +-
 .../inverted-index-join/ngram-jaccard_02.plan   |    32 +-
 .../inverted-index-join/ngram-jaccard_03.plan   |    32 +-
 .../inverted-index-join/ngram-jaccard_04.plan   |    32 +-
 .../olist-edit-distance-check_02.plan           |     6 +-
 .../olist-edit-distance-check_03.plan           |     6 +-
 .../olist-edit-distance-check_04.plan           |     6 +-
 .../olist-edit-distance_02.plan                 |     6 +-
 .../olist-edit-distance_03.plan                 |     6 +-
 .../olist-edit-distance_04.plan                 |     6 +-
 .../olist-fuzzyeq-edit-distance_02.plan         |     6 +-
 .../olist-fuzzyeq-edit-distance_03.plan         |     6 +-
 .../olist-fuzzyeq-jaccard_02.plan               |     6 +-
 .../olist-fuzzyeq-jaccard_03.plan               |     6 +-
 .../olist-jaccard-check_02.plan                 |     6 +-
 .../olist-jaccard-check_03.plan                 |     6 +-
 .../olist-jaccard-check_04.plan                 |     6 +-
 .../inverted-index-join/olist-jaccard_02.plan   |     6 +-
 .../inverted-index-join/olist-jaccard_03.plan   |     6 +-
 .../inverted-index-join/olist-jaccard_04.plan   |     6 +-
 .../ulist-fuzzyeq-jaccard_02.plan               |     6 +-
 .../ulist-fuzzyeq-jaccard_03.plan               |     6 +-
 .../ulist-jaccard-check_02.plan                 |     6 +-
 .../ulist-jaccard-check_03.plan                 |     6 +-
 .../ulist-jaccard-check_04.plan                 |     6 +-
 .../inverted-index-join/ulist-jaccard_02.plan   |     6 +-
 .../inverted-index-join/ulist-jaccard_03.plan   |     6 +-
 .../inverted-index-join/ulist-jaccard_04.plan   |     6 +-
 .../word-fuzzyeq-jaccard_02.plan                |    32 +-
 .../word-fuzzyeq-jaccard_03.plan                |    32 +-
 .../word-jaccard-check-after-btree-access.plan  |    32 +-
 .../word-jaccard-check_02.plan                  |    32 +-
 .../word-jaccard-check_03.plan                  |    32 +-
 .../word-jaccard-check_04.plan                  |    32 +-
 .../inverted-index-join/word-jaccard_02.plan    |    32 +-
 .../inverted-index-join/word-jaccard_03.plan    |    32 +-
 .../inverted-index-join/word-jaccard_04.plan    |    32 +-
 .../optimizerts/results/join-super-key_01.plan  |     4 +-
 .../optimizerts/results/join-super-key_02.plan  |     4 +-
 .../results/joins/nested_query_with_bcast.plan  |    12 +-
 .../resources/optimizerts/results/loj-core.plan |    10 +-
 .../optimizerts/results/loj-core_ps.plan        |    16 +-
 .../optimizerts/results/loj-sugar.plan          |    10 +-
 .../optimizerts/results/loj-sugar_ps.plan       |    16 +-
 .../optimizerts/results/loj-super-key_01.plan   |    10 +-
 .../optimizerts/results/loj-super-key_02.plan   |     8 +-
 .../results/meta/with_clause_meta.plan          |     8 +-
 .../btree-index-join/ASTERIXDB-2199.plan        |     2 +-
 .../btree-index-join/disjunction-to-join.plan   |    25 +-
 ...n-probe-pidx-with-join-btree-sidx_01_ps.plan |    20 +-
 ...n-probe-pidx-with-join-btree-sidx_02_ps.plan |    20 +-
 .../secondary-equi-join_01.plan                 |    33 +-
 .../btree-index/btree-secondary-33.plan         |    20 +-
 .../btree-index/btree-secondary-34.plan         |    20 +-
 .../btree-index/btree-secondary-35.plan         |    20 +-
 .../btree-index/btree-secondary-36.plan         |    20 +-
 .../btree-index/btree-secondary-37.plan         |    12 +-
 .../btree-index/btree-secondary-38.plan         |    20 +-
 .../btree-index/btree-secondary-39.plan         |    12 +-
 .../btree-index/btree-secondary-54.plan         |    20 +-
 .../btree-index/btree-secondary-55.plan         |    20 +-
 .../btree-index/btree-secondary-56.plan         |    20 +-
 .../btree-index/btree-secondary-57.plan         |    20 +-
 .../btree-index/btree-secondary-60.plan         |    20 +-
 .../ngram-contains-panic.plan                   |    10 +-
 .../ngram-contains-panic_ps.plan                |    24 +-
 .../inverted-index-basic/ngram-contains.plan    |    16 +-
 .../inverted-index-basic/ngram-contains_ps.plan |    36 +-
 .../ngram-edit-distance-check-panic.plan        |    12 +-
 .../ngram-edit-distance-check.plan              |    18 +-
 .../ngram-edit-distance-panic.plan              |    12 +-
 .../ngram-edit-distance.plan                    |    18 +-
 .../ngram-fuzzyeq-edit-distance.plan            |    18 +-
 .../ngram-fuzzyeq-jaccard.plan                  |    18 +-
 .../ngram-jaccard-check.plan                    |    18 +-
 .../inverted-index-basic/ngram-jaccard.plan     |    18 +-
 .../olist-edit-distance-check-panic.plan        |    10 +-
 .../olist-edit-distance-check-panic_ps.plan     |    24 +-
 .../olist-edit-distance-check.plan              |    16 +-
 .../olist-edit-distance-check_ps.plan           |    36 +-
 .../olist-edit-distance-panic.plan              |    10 +-
 .../olist-edit-distance-panic_ps.plan           |    24 +-
 .../olist-edit-distance.plan                    |    16 +-
 .../olist-edit-distance_ps.plan                 |    36 +-
 .../olist-fuzzyeq-edit-distance.plan            |    16 +-
 .../olist-fuzzyeq-edit-distance_ps.plan         |    36 +-
 .../olist-fuzzyeq-jaccard.plan                  |    18 +-
 .../olist-jaccard-check.plan                    |    18 +-
 .../inverted-index-basic/olist-jaccard.plan     |    18 +-
 .../ulist-fuzzyeq-jaccard.plan                  |    18 +-
 .../ulist-jaccard-check.plan                    |    18 +-
 .../inverted-index-basic/ulist-jaccard.plan     |    18 +-
 .../inverted-index-basic/word-contains.plan     |    10 +-
 .../inverted-index-basic/word-contains_ps.plan  |    24 +-
 .../word-fuzzyeq-jaccard.plan                   |    18 +-
 .../word-jaccard-check.plan                     |    18 +-
 .../inverted-index-basic/word-jaccard.plan      |    18 +-
 .../ngram-edit-distance-check-let-panic.plan    |    12 +-
 .../ngram-edit-distance-check-let.plan          |    18 +-
 .../ngram-jaccard-check-let.plan                |    18 +-
 .../ngram-jaccard-check-multi-let.plan          |    14 +-
 .../olist-edit-distance-check-let-panic.plan    |    10 +-
 .../olist-edit-distance-check-let-panic_ps.plan |    24 +-
 .../olist-edit-distance-check-let.plan          |    16 +-
 .../olist-edit-distance-check-let_ps.plan       |    36 +-
 .../olist-jaccard-check-let.plan                |    18 +-
 .../ulist-jaccard-check-let.plan                |    18 +-
 .../word-jaccard-check-let.plan                 |    18 +-
 .../word-jaccard-check-multi-let.plan           |    14 +-
 ...with-join-edit-distance-check-idx_01_ps.plan |    28 +-
 ...-pidx-with-join-jaccard-check-idx_01_ps.plan |    76 +-
 .../ngram-fuzzyeq-jaccard_01.plan               |    32 +-
 .../ngram-jaccard-check_01.plan                 |    32 +-
 .../ngram-jaccard-inline.plan                   |    52 +-
 .../inverted-index-join/ngram-jaccard_01.plan   |    32 +-
 .../word-fuzzyeq-jaccard_01.plan                |    32 +-
 .../word-jaccard-check-after-btree-access.plan  |    62 +-
 .../word-jaccard-check_01.plan                  |    32 +-
 .../word-jaccard-inline.plan                    |    52 +-
 .../inverted-index-join/word-jaccard_01.plan    |    32 +-
 ...n-probe-pidx-with-join-rtree-sidx_01_ps.plan |    20 +-
 ...n-probe-pidx-with-join-rtree-sidx_02_ps.plan |    20 +-
 .../spatial-intersect-point_01.plan             |    33 +-
 .../spatial-intersect-point_03.plan             |    33 +-
 .../btree-index-join/disjunction-to-join.plan   |    25 +-
 ...probe-pidx-with-join-btree-sidx_01_1_ps.plan |    20 +-
 ...probe-pidx-with-join-btree-sidx_01_2_ps.plan |    20 +-
 ...probe-pidx-with-join-btree-sidx_02_1_ps.plan |    20 +-
 ...probe-pidx-with-join-btree-sidx_02_2_ps.plan |    20 +-
 .../01.plan                                     |     2 +-
 .../02.plan                                     |     2 +-
 .../03.plan                                     |    10 +-
 .../04.plan                                     |    10 +-
 .../05.plan                                     |    10 +-
 .../06.plan                                     |     6 +-
 .../07.plan                                     |     6 +-
 .../secondary-equi-join_01.plan                 |    33 +-
 .../secondary-equi-join_02.plan                 |    33 +-
 .../secondary-equi-join_03.plan                 |    33 +-
 .../secondary-equi-join_04.plan                 |    33 +-
 .../btree-index/btree-secondary-33.plan         |    20 +-
 .../btree-index/btree-secondary-34.plan         |    20 +-
 .../btree-index/btree-secondary-35.plan         |    20 +-
 .../btree-index/btree-secondary-36.plan         |    20 +-
 .../btree-index/btree-secondary-37.plan         |    12 +-
 .../btree-index/btree-secondary-38.plan         |    20 +-
 .../btree-index/btree-secondary-39.plan         |    12 +-
 .../btree-index/btree-secondary-54.plan         |    20 +-
 .../btree-index/btree-secondary-55.plan         |    20 +-
 .../btree-index/btree-secondary-56.plan         |    20 +-
 .../btree-index/btree-secondary-57.plan         |    20 +-
 .../btree-index/btree-secondary-60.plan         |    20 +-
 .../non-enforced-composite-key/01.plan          |    20 +-
 .../non-enforced-composite-key/02.plan          |     2 +-
 .../non-enforced-composite-key/03.plan          |    31 +-
 .../non-enforced-composite-key/04.plan          |     6 +-
 .../non-enforced-composite-key/05.plan          |     6 +-
 .../non-enforced-composite-key/06.plan          |     6 +-
 .../non-enforced-composite-key/07.plan          |     6 +-
 .../non-enforced-composite-key/08.plan          |     6 +-
 .../non-enforced-composite-key/09.plan          |     6 +-
 .../non-enforced-composite-key/10.plan          |     6 +-
 .../non-enforced-composite-key/11.plan          |     6 +-
 .../non-enforced-composite-key/12.plan          |     8 +-
 .../ngram-contains-panic.plan                   |    10 +-
 .../ngram-contains-panic_ps.plan                |    24 +-
 .../inverted-index-basic/ngram-contains.plan    |    16 +-
 .../inverted-index-basic/ngram-contains_ps.plan |    36 +-
 .../ngram-edit-distance-check-panic.plan        |    12 +-
 .../ngram-edit-distance-check.plan              |    18 +-
 .../ngram-edit-distance-panic.plan              |    12 +-
 .../ngram-edit-distance.plan                    |    18 +-
 .../ngram-fuzzyeq-edit-distance.plan            |    18 +-
 .../ngram-fuzzyeq-jaccard.plan                  |    18 +-
 .../ngram-jaccard-check.plan                    |    18 +-
 .../inverted-index-basic/ngram-jaccard.plan     |    18 +-
 .../inverted-index-basic/word-contains.plan     |    10 +-
 .../inverted-index-basic/word-contains_ps.plan  |    24 +-
 .../word-fuzzyeq-jaccard.plan                   |    18 +-
 .../word-jaccard-check.plan                     |    18 +-
 .../inverted-index-basic/word-jaccard.plan      |    18 +-
 .../ngram-edit-distance-check-let-panic.plan    |    12 +-
 .../ngram-edit-distance-check-let.plan          |    18 +-
 .../ngram-jaccard-check-let.plan                |    18 +-
 .../ngram-jaccard-check-multi-let.plan          |    14 +-
 .../word-jaccard-check-let.plan                 |    18 +-
 .../word-jaccard-check-multi-let.plan           |    14 +-
 ...with-join-edit-distance-check-idx_01_ps.plan |    28 +-
 .../ngram-contains_01_ps.plan                   |     4 +-
 .../ngram-contains_02_ps.plan                   |     4 +-
 .../ngram-contains_03_ps.plan                   |     8 +-
 .../ngram-contains_04_ps.plan                   |     8 +-
 .../ngram-fuzzyeq-jaccard_01.plan               |    32 +-
 .../ngram-fuzzyeq-jaccard_02.plan               |    32 +-
 .../ngram-fuzzyeq-jaccard_03.plan               |    32 +-
 .../ngram-fuzzyeq-jaccard_04.plan               |    32 +-
 .../ngram-jaccard-check_01.plan                 |    32 +-
 .../ngram-jaccard-check_02.plan                 |    32 +-
 .../ngram-jaccard-check_03.plan                 |    32 +-
 .../ngram-jaccard-check_04.plan                 |    32 +-
 .../ngram-jaccard-inline.plan                   |    52 +-
 .../inverted-index-join/ngram-jaccard_01.plan   |    32 +-
 .../inverted-index-join/ngram-jaccard_02.plan   |    32 +-
 .../inverted-index-join/ngram-jaccard_03.plan   |    32 +-
 .../inverted-index-join/ngram-jaccard_04.plan   |    32 +-
 .../word-fuzzyeq-jaccard_01.plan                |    32 +-
 .../word-fuzzyeq-jaccard_02.plan                |    32 +-
 .../word-fuzzyeq-jaccard_03.plan                |    32 +-
 .../word-fuzzyeq-jaccard_04.plan                |    32 +-
 .../word-jaccard-check-after-btree-access.plan  |    62 +-
 .../word-jaccard-check_01.plan                  |    32 +-
 .../word-jaccard-check_02.plan                  |    32 +-
 .../word-jaccard-check_03.plan                  |    32 +-
 .../word-jaccard-check_04.plan                  |    32 +-
 .../word-jaccard-inline.plan                    |    52 +-
 .../inverted-index-join/word-jaccard_01.plan    |    32 +-
 .../inverted-index-join/word-jaccard_02.plan    |    32 +-
 .../inverted-index-join/word-jaccard_03.plan    |    32 +-
 .../inverted-index-join/word-jaccard_04.plan    |    32 +-
 ...n-probe-pidx-with-join-rtree-sidx_01_ps.plan |    20 +-
 ...n-probe-pidx-with-join-rtree-sidx_02_ps.plan |    20 +-
 .../spatial-intersect-point_01.plan             |    33 +-
 .../spatial-intersect-point_03.plan             |    33 +-
 .../spatial-intersect-point_04.plan             |    33 +-
 .../optimizerts/results/nested_loj2.plan        |    18 +-
 ...probe-pidx-with-join-btree-sidx_01_1_ps.plan |    20 +-
 ...probe-pidx-with-join-btree-sidx_01_2_ps.plan |    20 +-
 ...probe-pidx-with-join-btree-sidx_02_1_ps.plan |    20 +-
 ...probe-pidx-with-join-btree-sidx_02_2_ps.plan |    20 +-
 .../ngram-contains-panic_ps.plan                |     4 +-
 .../inverted-index-basic/ngram-contains_ps.plan |     8 +-
 .../inverted-index-basic/word-contains_ps.plan  |     4 +-
 ...with-join-edit-distance-check-idx_01_ps.plan |    28 +-
 .../ngram-contains_01_ps.plan                   |     4 +-
 .../ngram-contains_02_ps.plan                   |     8 +-
 .../ngram-contains_03_ps.plan                   |     8 +-
 .../ngram-contains_04_ps.plan                   |     8 +-
 ...n-probe-pidx-with-join-rtree-sidx_01_ps.plan |    20 +-
 ...n-probe-pidx-with-join-rtree-sidx_02_ps.plan |    20 +-
 .../btree-equi-join-non-enforced-05.plan        |    10 +-
 .../btree-equi-join-non-enforced-05_ps.plan     |    16 +-
 .../btree-equi-join-non-enforced-06.plan        |    10 +-
 .../btree-equi-join-non-enforced-06_ps.plan     |    16 +-
 .../btree-equi-join-non-enforced-07.plan        |    10 +-
 .../btree-equi-join-non-enforced-07_ps.plan     |    16 +-
 .../btree-equi-join-non-enforced-08.plan        |     6 +-
 .../btree-equi-join-non-enforced-08_ps.plan     |     8 +-
 .../btree-equi-join-non-enforced-09.plan        |     6 +-
 .../btree-equi-join-non-enforced-09_ps.plan     |     8 +-
 .../btree-index-non-enforced-04.plan            |     6 +-
 .../btree-index-non-enforced-04_ps.plan         |     8 +-
 .../btree-index-non-enforced-05.plan            |     6 +-
 .../btree-index-non-enforced-05_ps.plan         |     8 +-
 .../btree-index-non-enforced-06.plan            |     6 +-
 .../btree-index-non-enforced-06_ps.plan         |     8 +-
 .../btree-index-non-enforced-07.plan            |     6 +-
 .../btree-index-non-enforced-07_ps.plan         |     8 +-
 .../btree-index-non-enforced-08.plan            |     6 +-
 .../btree-index-non-enforced-08_ps.plan         |     8 +-
 .../btree-index-non-enforced-09.plan            |     6 +-
 .../btree-index-non-enforced-09_ps.plan         |     8 +-
 .../btree-index-non-enforced-10.plan            |     6 +-
 .../btree-index-non-enforced-105.plan           |     8 +-
 .../btree-index-non-enforced-105_ps.plan        |    12 +-
 .../btree-index-non-enforced-10_ps.plan         |     8 +-
 .../btree-index-non-enforced-11.plan            |     6 +-
 .../btree-index-non-enforced-11_ps.plan         |     8 +-
 .../results/orderby-desc-using-gby_ps.plan      |     8 +-
 ...orders-index-search-conjunctive-open_01.plan |     4 +-
 ...ers-index-search-conjunctive-open_01_ps.plan |     8 +-
 ...orders-index-search-conjunctive-open_02.plan |     4 +-
 ...ers-index-search-conjunctive-open_02_ps.plan |     8 +-
 .../orders-index-search-conjunctive_01.plan     |     4 +-
 .../orders-index-search-conjunctive_01_ps.plan  |     8 +-
 .../orders-index-search-conjunctive_02.plan     |     4 +-
 .../orders-index-search-conjunctive_02_ps.plan  |     8 +-
 .../p_sort_seq_merge/p_sort_seq_merge.plan      |     6 +-
 .../parallel_sort_enabled_disabled.1.plan       |     4 +-
 .../parallel_sort_enabled_disabled.2.plan       |     4 +-
 .../results/pull_select_above_eq_join.plan      |     6 +-
 .../results/push-project-through-group.plan     |    12 +-
 .../q01_pricing_summary_report_nt_ps.plan       |    12 +-
 .../optimizerts/results/q08_group_by.plan       |    30 +-
 .../optimizerts/results/q09_group_by.plan       |    18 +-
 .../results/query-ASTERIXDB-159-3.plan          |     8 +-
 .../results/query-ASTERIXDB-1671.plan           |     4 +-
 .../results/query-ASTERIXDB-1806.plan           |     6 +-
 .../results/query-ASTERIXDB-1806_ps.plan        |    12 +-
 .../results/query-ASTERIXDB-2354.plan           |     4 +-
 .../results/query-ASTERIXDB-2354_ps.plan        |     4 +-
 .../results/query-ASTERIXDB-2408.plan           |    10 +-
 .../results/query-ASTERIXDB-2408_ps.plan        |    16 +-
 .../results/query-ASTERIXDB-810-2.plan          |    10 +-
 .../results/query-ASTERIXDB-810-2_ps.plan       |    20 +-
 .../results/query-ASTERIXDB-810-3.plan          |    10 +-
 .../results/query-ASTERIXDB-810-3_ps.plan       |    20 +-
 .../results/query-ASTERIXDB-810.plan            |    10 +-
 .../results/query-ASTERIXDB-810_ps.plan         |    20 +-
 .../optimizerts/results/query-issue562_ps.plan  |    36 +-
 .../optimizerts/results/query-issue601.plan     |     6 +-
 .../optimizerts/results/query_issue849-2.plan   |     4 +-
 .../optimizerts/results/query_issue849.plan     |     4 +-
 ...n-probe-pidx-with-join-rtree-sidx_01_ps.plan |    16 +-
 ...join-probe-pidx-with-join-rtree-sidx_02.plan |    10 +-
 ...n-probe-pidx-with-join-rtree-sidx_02_ps.plan |    20 +-
 .../spatial-intersect-point_02.plan             |     2 +-
 .../spatial-intersect-point_03.plan             |     2 +-
 .../rtree-sidx-idxonly-01-disable-idxonly.plan  |     2 +-
 .../results/skip-index/skip-ngram-index_ps.plan |     4 +-
 .../skip-secondary-btree-index-2.plan           |     2 +-
 .../results/split-materialization.plan          |     4 +-
 .../results/split-materialization_ps.plan       |     4 +-
 .../statement-params/statement-params-01.plan   |     2 +-
 .../statement-params/statement-params-02.plan   |     2 +-
 .../statement-params/statement-params-03.plan   |     2 +-
 .../optimizerts/results/subquery/exists.plan    |    20 +-
 .../optimizerts/results/subquery/exists_ps.plan |    40 +-
 .../optimizerts/results/subquery/in.plan        |    10 +-
 .../results/subquery/in_as_or_1.plan            |     6 +-
 .../results/subquery/in_as_or_1_ps.plan         |     8 +-
 .../results/subquery/in_as_or_2.plan            |    12 +-
 .../results/subquery/in_as_or_2_ps.plan         |    24 +-
 .../results/subquery/in_as_or_3.plan            |     6 +-
 .../results/subquery/in_as_or_3_ps.plan         |     8 +-
 .../results/subquery/in_as_or_4.plan            |    12 +-
 .../results/subquery/in_as_or_4_ps.plan         |    24 +-
 .../results/subquery/in_as_or_5.plan            |     6 +-
 .../results/subquery/in_as_or_5_ps.plan         |     8 +-
 .../results/subquery/in_as_or_6.plan            |    12 +-
 .../results/subquery/in_as_or_6_ps.plan         |    24 +-
 .../results/subquery/in_correlated.plan         |    10 +-
 .../results/subquery/in_correlated_ps.plan      |    16 +-
 .../optimizerts/results/subquery/in_ps.plan     |    16 +-
 .../results/subquery/not_exists.plan            |    20 +-
 .../results/subquery/not_exists_ps.plan         |    40 +-
 .../results/subquery/query-ASTERIXDB-1572.plan  |    20 +-
 .../results/tpcds/query-ASTERIXDB-1580.plan     |    28 +-
 .../tpcds/query-ASTERIXDB-1581-correlated.plan  |    64 +-
 .../results/tpcds/query-ASTERIXDB-1581.plan     |    26 +-
 .../results/tpcds/query-ASTERIXDB-1591.plan     |    60 +-
 .../results/tpcds/query-ASTERIXDB-1596.plan     |    10 +-
 .../results/tpcds/query-ASTERIXDB-1596_ps.plan  |    16 +-
 .../optimizerts/results/tpch/q12_shipping.plan  |    12 +-
 .../results/tpch/q12_shipping_broadcast.plan    |    10 +-
 .../results/tpch/q12_shipping_broadcast_ps.plan |    20 +-
 .../results/tpch/q12_shipping_ps.plan           |    24 +-
 .../optimizerts/results/window/window_02.plan   |    23 +
 .../window/misc_01/misc_01.3.query.sqlpp        |     3 +-
 .../window/misc_01/misc_01.4.query.sqlpp        |     2 +-
 .../window/misc_01/misc_01.5.query.sqlpp        |     2 +-
 .../window/misc_01/misc_01.6.query.sqlpp        |    28 +
 .../window/ntile_02/ntile_02.1.query.sqlpp      |     2 +-
 .../window/pg_win/pg_win.1.ddl.sqlpp            |    75 +
 .../window/pg_win/pg_win.10.query.sqlpp         |    29 +
 .../window/pg_win/pg_win.100.query.sqlpp        |    30 +
 .../window/pg_win/pg_win.101.query.sqlpp        |    30 +
 .../window/pg_win/pg_win.102.query.sqlpp        |    30 +
 .../window/pg_win/pg_win.103.query.sqlpp        |    30 +
 .../window/pg_win/pg_win.104.query.sqlpp        |    32 +
 .../window/pg_win/pg_win.105.query.sqlpp        |    33 +
 .../window/pg_win/pg_win.106.query.sqlpp        |    29 +
 .../window/pg_win/pg_win.107.query.sqlpp        |    30 +
 .../window/pg_win/pg_win.108.query.sqlpp        |    31 +
 .../window/pg_win/pg_win.109.query.sqlpp        |    30 +
 .../window/pg_win/pg_win.11.query.sqlpp         |    29 +
 .../window/pg_win/pg_win.110.query.sqlpp        |    30 +
 .../window/pg_win/pg_win.111.query.sqlpp        |    30 +
 .../window/pg_win/pg_win.112.query.sqlpp        |    30 +
 .../window/pg_win/pg_win.113.query.sqlpp        |    30 +
 .../window/pg_win/pg_win.114.query.sqlpp        |    31 +
 .../window/pg_win/pg_win.115.query.sqlpp        |    30 +
 .../window/pg_win/pg_win.116.query.sqlpp        |    30 +
 .../window/pg_win/pg_win.117.query.sqlpp        |    29 +
 .../window/pg_win/pg_win.118.query.sqlpp        |    32 +
 .../window/pg_win/pg_win.119.query.sqlpp        |    31 +
 .../window/pg_win/pg_win.12.query.sqlpp         |    29 +
 .../window/pg_win/pg_win.13.query.sqlpp         |    29 +
 .../window/pg_win/pg_win.14.query.sqlpp         |    32 +
 .../window/pg_win/pg_win.15.query.sqlpp         |    29 +
 .../window/pg_win/pg_win.16.query.sqlpp         |    30 +
 .../window/pg_win/pg_win.17.query.sqlpp         |    35 +
 .../window/pg_win/pg_win.18.query.sqlpp         |    31 +
 .../window/pg_win/pg_win.19.query.sqlpp         |    30 +
 .../window/pg_win/pg_win.2.update.sqlpp         |    71 +
 .../window/pg_win/pg_win.20.query.sqlpp         |    30 +
 .../window/pg_win/pg_win.21.query.sqlpp         |    30 +
 .../window/pg_win/pg_win.22.query.sqlpp         |    30 +
 .../window/pg_win/pg_win.23.query.sqlpp         |    30 +
 .../window/pg_win/pg_win.24.query.sqlpp         |    32 +
 .../window/pg_win/pg_win.25.query.sqlpp         |    31 +
 .../window/pg_win/pg_win.26.query.sqlpp         |    32 +
 .../window/pg_win/pg_win.27.query.sqlpp         |    32 +
 .../window/pg_win/pg_win.28.query.sqlpp         |    31 +
 .../window/pg_win/pg_win.29.query.sqlpp         |    33 +
 .../window/pg_win/pg_win.3.query.sqlpp          |    28 +
 .../window/pg_win/pg_win.30.query.sqlpp         |    30 +
 .../window/pg_win/pg_win.31.query.sqlpp         |    32 +
 .../window/pg_win/pg_win.32.query.sqlpp         |    31 +
 .../window/pg_win/pg_win.33.query.sqlpp         |    30 +
 .../window/pg_win/pg_win.34.query.sqlpp         |    30 +
 .../window/pg_win/pg_win.35.query.sqlpp         |    31 +
 .../window/pg_win/pg_win.36.query.sqlpp         |    31 +
 .../window/pg_win/pg_win.37.query.sqlpp         |    30 +
 .../window/pg_win/pg_win.38.query.sqlpp         |    31 +
 .../window/pg_win/pg_win.39.query.sqlpp         |    32 +
 .../window/pg_win/pg_win.4.query.sqlpp          |    28 +
 .../window/pg_win/pg_win.40.query.sqlpp         |    32 +
 .../window/pg_win/pg_win.41.query.sqlpp         |    32 +
 .../window/pg_win/pg_win.42.query.sqlpp         |    32 +
 .../window/pg_win/pg_win.43.query.sqlpp         |    31 +
 .../window/pg_win/pg_win.44.query.sqlpp         |    31 +
 .../window/pg_win/pg_win.45.query.sqlpp         |    31 +
 .../window/pg_win/pg_win.46.query.sqlpp         |    29 +
 .../window/pg_win/pg_win.47.query.sqlpp         |    30 +
 .../window/pg_win/pg_win.48.query.sqlpp         |    30 +
 .../window/pg_win/pg_win.49.query.sqlpp         |    30 +
 .../window/pg_win/pg_win.5.query.sqlpp          |    28 +
 .../window/pg_win/pg_win.50.query.sqlpp         |    30 +
 .../window/pg_win/pg_win.51.query.sqlpp         |    30 +
 .../window/pg_win/pg_win.52.query.sqlpp         |    31 +
 .../window/pg_win/pg_win.53.query.sqlpp         |    30 +
 .../window/pg_win/pg_win.54.query.sqlpp         |    31 +
 .../window/pg_win/pg_win.55.query.sqlpp         |    31 +
 .../window/pg_win/pg_win.56.query.sqlpp         |    31 +
 .../window/pg_win/pg_win.57.query.sqlpp         |    31 +
 .../window/pg_win/pg_win.58.query.sqlpp         |    31 +
 .../window/pg_win/pg_win.59.query.sqlpp         |    30 +
 .../window/pg_win/pg_win.6.query.sqlpp          |    29 +
 .../window/pg_win/pg_win.60.query.sqlpp         |    30 +
 .../window/pg_win/pg_win.61.query.sqlpp         |    30 +
 .../window/pg_win/pg_win.62.query.sqlpp         |    30 +
 .../window/pg_win/pg_win.63.query.sqlpp         |    30 +
 .../window/pg_win/pg_win.64.query.sqlpp         |    30 +
 .../window/pg_win/pg_win.65.query.sqlpp         |    32 +
 .../window/pg_win/pg_win.66.query.sqlpp         |    30 +
 .../window/pg_win/pg_win.67.query.sqlpp         |    30 +
 .../window/pg_win/pg_win.68.query.sqlpp         |    31 +
 .../window/pg_win/pg_win.69.query.sqlpp         |    31 +
 .../window/pg_win/pg_win.7.query.sqlpp          |    28 +
 .../window/pg_win/pg_win.70.query.sqlpp         |    31 +
 .../window/pg_win/pg_win.71.query.sqlpp         |    32 +
 .../window/pg_win/pg_win.72.query.sqlpp         |    32 +
 .../window/pg_win/pg_win.73.query.sqlpp         |    32 +
 .../window/pg_win/pg_win.74.query.sqlpp         |    29 +
 .../window/pg_win/pg_win.75.query.sqlpp         |    29 +
 .../window/pg_win/pg_win.76.query.sqlpp         |    29 +
 .../window/pg_win/pg_win.77.query.sqlpp         |    30 +
 .../window/pg_win/pg_win.78.query.sqlpp         |    29 +
 .../window/pg_win/pg_win.79.query.sqlpp         |    29 +
 .../window/pg_win/pg_win.8.query.sqlpp          |    29 +
 .../window/pg_win/pg_win.80.query.sqlpp         |    29 +
 .../window/pg_win/pg_win.81.query.sqlpp         |    29 +
 .../window/pg_win/pg_win.82.query.sqlpp         |    28 +
 .../window/pg_win/pg_win.83.query.sqlpp         |    30 +
 .../window/pg_win/pg_win.84.query.sqlpp         |    31 +
 .../window/pg_win/pg_win.85.query.sqlpp         |    30 +
 .../window/pg_win/pg_win.86.query.sqlpp         |    30 +
 .../window/pg_win/pg_win.87.query.sqlpp         |    30 +
 .../window/pg_win/pg_win.88.query.sqlpp         |    30 +
 .../window/pg_win/pg_win.89.query.sqlpp         |    29 +
 .../window/pg_win/pg_win.9.query.sqlpp          |    29 +
 .../window/pg_win/pg_win.90.query.sqlpp         |    29 +
 .../window/pg_win/pg_win.91.query.sqlpp         |    30 +
 .../window/pg_win/pg_win.92.query.sqlpp         |    31 +
 .../window/pg_win/pg_win.93.query.sqlpp         |    31 +
 .../window/pg_win/pg_win.94.query.sqlpp         |    31 +
 .../window/pg_win/pg_win.95.query.sqlpp         |    32 +
 .../window/pg_win/pg_win.96.query.sqlpp         |    31 +
 .../window/pg_win/pg_win.97.query.sqlpp         |    30 +
 .../window/pg_win/pg_win.98.query.sqlpp         |    31 +
 .../window/pg_win/pg_win.99.query.sqlpp         |    30 +
 .../count_dataset/count_dataset.1.adm           |    18 +-
 .../aggregate/count_dataset/count_dataset.1.adm |    18 +-
 .../explain_field_access.1.adm                  |    42 +-
 .../explain_field_access_closed.1.adm           |    26 +-
 .../push-limit-to-primary-lookup-select.3.adm   |    14 +-
 .../push-limit-to-primary-lookup-select.5.adm   |    24 +-
 .../push-limit-to-primary-lookup.3.adm          |    14 +-
 .../push-limit-to-primary-lookup.5.adm          |    14 +-
 .../push-limit-to-primary-scan-select.3.adm     |     4 +-
 .../push-limit-to-primary-scan-select.5.adm     |    38 +-
 .../push-limit-to-primary-scan-select.6.adm     |    16 +-
 .../push-limit-to-primary-scan-select.8.adm     |    16 +-
 .../push-limit-to-primary-scan.3.adm            |     4 +-
 .../push-limit-to-primary-scan.5.adm            |     4 +-
 .../enforcing_item_type.1.adm                   |     8 +-
 .../single_dataset_with_index.13.adm            |    14 +-
 .../single_dataset_with_index.8.adm             |    14 +-
 .../results/window/misc_01/misc_01.6.adm        |     4 +
 .../results/window/pg_win/pg_win.10.adm         |    10 +
 .../results/window/pg_win/pg_win.100.adm        |    10 +
 .../results/window/pg_win/pg_win.101.adm        |    10 +
 .../results/window/pg_win/pg_win.102.adm        |    10 +
 .../results/window/pg_win/pg_win.103.adm        |    10 +
 .../results/window/pg_win/pg_win.104.adm        |     6 +
 .../results/window/pg_win/pg_win.105.adm        |     6 +
 .../results/window/pg_win/pg_win.106.adm        |     3 +
 .../results/window/pg_win/pg_win.107.adm        |     3 +
 .../results/window/pg_win/pg_win.108.adm        |     3 +
 .../results/window/pg_win/pg_win.109.adm        |     3 +
 .../results/window/pg_win/pg_win.11.adm         |    10 +
 .../results/window/pg_win/pg_win.110.adm        |    10 +
 .../results/window/pg_win/pg_win.111.adm        |    10 +
 .../results/window/pg_win/pg_win.112.adm        |    10 +
 .../results/window/pg_win/pg_win.113.adm        |    10 +
 .../results/window/pg_win/pg_win.114.adm        |    10 +
 .../results/window/pg_win/pg_win.115.adm        |    10 +
 .../results/window/pg_win/pg_win.116.adm        |    10 +
 .../results/window/pg_win/pg_win.117.adm        |    20 +
 .../results/window/pg_win/pg_win.118.adm        |    10 +
 .../results/window/pg_win/pg_win.119.adm        |     3 +
 .../results/window/pg_win/pg_win.12.adm         |     2 +
 .../results/window/pg_win/pg_win.13.adm         |     6 +
 .../results/window/pg_win/pg_win.14.adm         |    10 +
 .../results/window/pg_win/pg_win.15.adm         |    10 +
 .../results/window/pg_win/pg_win.16.adm         |     1 +
 .../results/window/pg_win/pg_win.17.adm         |    10 +
 .../results/window/pg_win/pg_win.18.adm         |    10 +
 .../results/window/pg_win/pg_win.19.adm         |    20 +
 .../results/window/pg_win/pg_win.20.adm         |    20 +
 .../results/window/pg_win/pg_win.21.adm         |    20 +
 .../results/window/pg_win/pg_win.22.adm         |    20 +
 .../results/window/pg_win/pg_win.23.adm         |    20 +
 .../results/window/pg_win/pg_win.24.adm         |    10 +
 .../results/window/pg_win/pg_win.25.adm         |    10 +
 .../results/window/pg_win/pg_win.26.adm         |    10 +
 .../results/window/pg_win/pg_win.27.adm         |    10 +
 .../results/window/pg_win/pg_win.28.adm         |    10 +
 .../results/window/pg_win/pg_win.29.adm         |    10 +
 .../results/window/pg_win/pg_win.3.adm          |    10 +
 .../results/window/pg_win/pg_win.30.adm         |    10 +
 .../results/window/pg_win/pg_win.31.adm         |    10 +
 .../results/window/pg_win/pg_win.32.adm         |    10 +
 .../results/window/pg_win/pg_win.33.adm         |    10 +
 .../results/window/pg_win/pg_win.34.adm         |    10 +
 .../results/window/pg_win/pg_win.35.adm         |    10 +
 .../results/window/pg_win/pg_win.36.adm         |    10 +
 .../results/window/pg_win/pg_win.37.adm         |    10 +
 .../results/window/pg_win/pg_win.38.adm         |    10 +
 .../results/window/pg_win/pg_win.39.adm         |    10 +
 .../results/window/pg_win/pg_win.4.adm          |    10 +
 .../results/window/pg_win/pg_win.40.adm         |    10 +
 .../results/window/pg_win/pg_win.41.adm         |    10 +
 .../results/window/pg_win/pg_win.42.adm         |    10 +
 .../results/window/pg_win/pg_win.43.adm         |    10 +
 .../results/window/pg_win/pg_win.44.adm         |    10 +
 .../results/window/pg_win/pg_win.45.adm         |    10 +
 .../results/window/pg_win/pg_win.46.adm         |    10 +
 .../results/window/pg_win/pg_win.47.adm         |    10 +
 .../results/window/pg_win/pg_win.48.adm         |    10 +
 .../results/window/pg_win/pg_win.49.adm         |    10 +
 .../results/window/pg_win/pg_win.5.adm          |    10 +
 .../results/window/pg_win/pg_win.50.adm         |    10 +
 .../results/window/pg_win/pg_win.51.adm         |    10 +
 .../results/window/pg_win/pg_win.52.adm         |    10 +
 .../results/window/pg_win/pg_win.53.adm         |    10 +
 .../results/window/pg_win/pg_win.54.adm         |    10 +
 .../results/window/pg_win/pg_win.55.adm         |    10 +
 .../results/window/pg_win/pg_win.56.adm         |    10 +
 .../results/window/pg_win/pg_win.57.adm         |    10 +
 .../results/window/pg_win/pg_win.58.adm         |    10 +
 .../results/window/pg_win/pg_win.59.adm         |    10 +
 .../results/window/pg_win/pg_win.6.adm          |    10 +
 .../results/window/pg_win/pg_win.60.adm         |    10 +
 .../results/window/pg_win/pg_win.61.adm         |    10 +
 .../results/window/pg_win/pg_win.62.adm         |    10 +
 .../results/window/pg_win/pg_win.63.adm         |    10 +
 .../results/window/pg_win/pg_win.64.adm         |    10 +
 .../results/window/pg_win/pg_win.65.adm         |    10 +
 .../results/window/pg_win/pg_win.66.adm         |    10 +
 .../results/window/pg_win/pg_win.67.adm         |    10 +
 .../results/window/pg_win/pg_win.68.adm         |    18 +
 .../results/window/pg_win/pg_win.69.adm         |    18 +
 .../results/window/pg_win/pg_win.7.adm          |    10 +
 .../results/window/pg_win/pg_win.70.adm         |    18 +
 .../results/window/pg_win/pg_win.71.adm         |    26 +
 .../results/window/pg_win/pg_win.72.adm         |    26 +
 .../results/window/pg_win/pg_win.73.adm         |    26 +
 .../results/window/pg_win/pg_win.74.adm         |    10 +
 .../results/window/pg_win/pg_win.75.adm         |    10 +
 .../results/window/pg_win/pg_win.76.adm         |    10 +
 .../results/window/pg_win/pg_win.77.adm         |    10 +
 .../results/window/pg_win/pg_win.78.adm         |    10 +
 .../results/window/pg_win/pg_win.79.adm         |    10 +
 .../results/window/pg_win/pg_win.8.adm          |    10 +
 .../results/window/pg_win/pg_win.80.adm         |    10 +
 .../results/window/pg_win/pg_win.81.adm         |    10 +
 .../results/window/pg_win/pg_win.82.adm         |    10 +
 .../results/window/pg_win/pg_win.83.adm         |    10 +
 .../results/window/pg_win/pg_win.84.adm         |    20 +
 .../results/window/pg_win/pg_win.85.adm         |    20 +
 .../results/window/pg_win/pg_win.86.adm         |    20 +
 .../results/window/pg_win/pg_win.87.adm         |    20 +
 .../results/window/pg_win/pg_win.88.adm         |    20 +
 .../results/window/pg_win/pg_win.89.adm         |    10 +
 .../results/window/pg_win/pg_win.9.adm          |    10 +
 .../results/window/pg_win/pg_win.90.adm         |    10 +
 .../results/window/pg_win/pg_win.91.adm         |    10 +
 .../results/window/pg_win/pg_win.92.adm         |    10 +
 .../results/window/pg_win/pg_win.93.adm         |    10 +
 .../results/window/pg_win/pg_win.94.adm         |    10 +
 .../results/window/pg_win/pg_win.95.adm         |    10 +
 .../results/window/pg_win/pg_win.96.adm         |    10 +
 .../results/window/pg_win/pg_win.97.adm         |    10 +
 .../results/window/pg_win/pg_win.98.adm         |    10 +
 .../results/window/pg_win/pg_win.99.adm         |    10 +
 .../window/misc_01/misc_01.1.ast                |     7 +
 .../window/misc_01/misc_01.2.ast                |     2 +
 .../window/misc_01/misc_01.3.ast                |   209 +
 .../window/misc_01/misc_01.4.ast                |    45 +
 .../window/misc_01/misc_01.5.ast                |    77 +
 .../window/misc_01/misc_01.6.ast                |    50 +
 .../resources/runtimets/testsuite_sqlpp.xml     |     5 +
 .../runtimets/testsuite_sqlpp_parser.xml        |     7 +
 .../asterix/common/exceptions/ErrorCode.java    |     3 +
 .../main/resources/asx_errormsg/en.properties   |     3 +
 .../lang/aql/rewrites/AqlQueryRewriter.java     |    19 +-
 .../aql/visitor/AQLToSQLPPPrintVisitor.java     |    10 +-
 .../lang/common/util/ExpressionUtils.java       |     6 +
 .../util/VariableCloneAndSubstitutionUtil.java  |    13 +-
 .../visitor/AbstractInlineUdfsVisitor.java      |    80 +-
 .../CloneAndSubstituteVariablesVisitor.java     |    13 +-
 .../visitor/GatherFunctionCallsVisitor.java     |    19 +-
 .../lang/sqlpp/expression/WindowExpression.java |   301 +-
 .../rewrites/SqlppFunctionBodyRewriter.java     |     6 +
 .../lang/sqlpp/rewrites/SqlppQueryRewriter.java |    92 +-
 ...bstractSqlppExpressionExtractionVisitor.java |   149 +
 .../visitor/Sql92AggregateFunctionVisitor.java  |   176 +
 .../SqlppBuiltinFunctionRewriteVisitor.java     |    20 +-
 .../SqlppGroupByAggregationSugarVisitor.java    |   120 +-
 .../rewrites/visitor/SqlppGroupByVisitor.java   |    16 +-
 .../visitor/SqlppInlineUdfsVisitor.java         |    30 +-
 .../SqlppWindowAggregationSugarVisitor.java     |   138 +
 .../visitor/SqlppWindowRewriteVisitor.java      |    97 +
 .../visitor/VariableCheckAndRewriteVisitor.java |    29 +-
 .../lang/sqlpp/util/FunctionMapUtil.java        |    31 +-
 .../lang/sqlpp/util/SqlppVariableUtil.java      |    43 +-
 .../visitor/CheckSql92AggregateVisitor.java     |    42 +-
 .../sqlpp/visitor/CheckSubqueryVisitor.java     |    72 +-
 .../lang/sqlpp/visitor/DeepCopyVisitor.java     |    59 +-
 .../lang/sqlpp/visitor/FreeVariableVisitor.java |    31 +-
 .../sqlpp/visitor/SqlppAstPrintVisitor.java     |    86 +-
 ...SqlppCloneAndSubstituteVariablesVisitor.java |    31 +-
 .../sqlpp/visitor/SqlppFormatPrintVisitor.java  |    30 +-
 .../AbstractSqlppExpressionScopingVisitor.java  |    17 +
 .../AbstractSqlppSimpleExpressionVisitor.java   |    36 +-
 .../asterix-lang-sqlpp/src/main/javacc/SQLPP.jj |   275 +-
 .../asterix/om/base/ADayTimeDuration.java       |    11 +
 .../asterix/om/base/AYearMonthDuration.java     |     3 +-
 .../asterix/om/functions/BuiltinFunctions.java  |   161 +-
 .../impl/CollectionMemberResultType.java        |    25 +-
 .../impl/PropagateTypeComputer.java             |    14 +-
 .../LastElementAggregateDescriptor.java         |    44 +
 .../collections/LastElementEvalFactory.java     |    86 +
 .../ATimeConstructorDescriptor.java             |     2 +-
 .../AbstractNumericArithmeticEval.java          |    12 +-
 .../functions/IfSystemNullDescriptor.java       |    58 +
 .../runtime/functions/FunctionCollection.java   |     4 +
 .../AbstractRankRunningAggregateEvaluator.java  |    16 +-
 .../std/NtileRunningAggregateEvaluator.java     |    32 +-
 .../PercentRankRunningAggregateEvaluator.java   |     4 +-
 .../std/RankRunningAggregateEvaluator.java      |     2 +-
 .../licenses/templates/source_only_licenses.ftl |    26 +
 .../AbstractOperatorWithNestedPlans.java        |    34 +
 .../operators/logical/GroupByOperator.java      |    19 +-
 .../operators/logical/SubplanOperator.java      |    21 +-
 .../operators/logical/WindowOperator.java       |   208 +-
 .../visitors/IsomorphismOperatorVisitor.java    |    49 +-
 .../IsomorphismVariableMappingVisitor.java      |     5 +-
 ...OperatorDeepCopyWithNewVariablesVisitor.java |    15 +-
 .../visitors/LogicalPropertiesVisitor.java      |    14 +-
 .../visitors/OperatorDeepCopyVisitor.java       |    26 +-
 .../visitors/ProducedVariableVisitor.java       |     5 +
 .../logical/visitors/SchemaVariableVisitor.java |    10 +-
 .../visitors/SubstituteVariableVisitor.java     |    47 +-
 .../logical/visitors/UsedVariableVisitor.java   |    44 +-
 .../physical/RunningAggregatePOperator.java     |     2 +-
 .../operators/physical/WindowPOperator.java     |   144 +-
 .../LogicalOperatorPrettyPrintVisitor.java      |    55 +-
 .../LogicalOperatorPrettyPrintVisitorJson.java  |    53 +-
 .../algebra/util/OperatorManipulationUtil.java  |    31 +-
 .../core/utils/LogicalOperatorDotVisitor.java   |    53 +-
 .../rules/ExtractCommonExpressionsRule.java     |     1 +
 .../InlineSingleReferenceVariablesRule.java     |     4 +-
 .../rules/IntroduceAggregateCombinerRule.java   |    25 +
 .../subplan/PushSubplanIntoGroupByRule.java     |     6 +-
 ...estedPlansAccumulatingAggregatorFactory.java |    58 +-
 .../NestedPlansRunningAggregatorFactory.java    |    55 +-
 .../AbstractRunningAggregatePushRuntime.java    |    62 +-
 .../aggrun/AbstractWindowPushRuntime.java       |   172 -
 .../aggrun/MaterializingWindowPushRuntime.java  |   152 -
 .../aggrun/RunningAggregatePushRuntime.java     |     9 +-
 .../aggrun/RunningAggregateRuntimeFactory.java  |    27 +-
 .../aggrun/SimpleWindowPushRuntime.java         |    54 -
 .../operators/aggrun/WindowRuntimeFactory.java  |    65 -
 .../operators/meta/PipelineAssembler.java       |    25 +
 .../win/AbstractWindowPushRuntime.java          |   173 +
 .../win/AbstractWindowRuntimeFactory.java       |    50 +
 .../win/WindowAggregatorDescriptorFactory.java  |   118 +
 .../win/WindowMaterializingPushRuntime.java     |   170 +
 .../win/WindowMaterializingRuntimeFactory.java  |    56 +
 .../win/WindowNestedPlansPushRuntime.java       |   358 +
 .../win/WindowNestedPlansRuntimeFactory.java    |   105 +
 .../operators/win/WindowSimplePushRuntime.java  |    57 +
 .../win/WindowSimpleRuntimeFactory.java         |    54 +
 .../tests/pushruntime/PushRuntimeTest.java      |     5 +-
 .../data/std/primitive/BytePointable.java       |     2 +-
 .../data/std/primitive/DoublePointable.java     |     2 +-
 .../data/std/primitive/FloatPointable.java      |     2 +-
 .../data/std/primitive/IntegerPointable.java    |     2 +-
 .../data/std/primitive/LongPointable.java       |     2 +-
 .../data/std/primitive/ShortPointable.java      |     2 +-
 .../apache/hyracks/data/std/util/DataUtils.java |    18 +
 .../dataflow/common/io/RunFileReader.java       |    11 +
 .../dataflow/common/utils/TupleUtils.java       |    15 +
 855 files changed, 23705 insertions(+), 5487 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/asterixdb/blob/f2c18aa9/asterixdb/LICENSE
----------------------------------------------------------------------
diff --git a/asterixdb/LICENSE b/asterixdb/LICENSE
index 7d7f90a..442228a 100644
--- a/asterixdb/LICENSE
+++ b/asterixdb/LICENSE
@@ -674,4 +674,36 @@
    such warranty or additional liability.
    END OF TERMS AND CONDITIONS
 ---
+   Portions of the AsterixDB tests
+       located at:
+         
asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/*,
+       and
+         asterix-app/data/tenk.tbl
+
+   are available under PostgreSQL License:
+---
+   PostgreSQL Database Management System
+   (formerly known as Postgres, then as Postgres95)
+
+   Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
+
+   Portions Copyright (c) 1994, The Regents of the University of California
+
+   Permission to use, copy, modify, and distribute this software and its
+   documentation for any purpose, without fee, and without a written agreement
+   is hereby granted, provided that the above copyright notice and this
+   paragraph and the following two paragraphs appear in all copies.
+
+   IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
+   DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING
+   LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS
+   DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE
+   POSSIBILITY OF SUCH DAMAGE.
+
+   THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
+   INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+   AND FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+   ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATIONS TO
+   PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+---
 

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/f2c18aa9/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/InjectTypeCastForFunctionArgumentsRule.java
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/InjectTypeCastForFunctionArgumentsRule.java
 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/InjectTypeCastForFunctionArgumentsRule.java
index d0107c0..3678826 100644
--- 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/InjectTypeCastForFunctionArgumentsRule.java
+++ 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/InjectTypeCastForFunctionArgumentsRule.java
@@ -59,6 +59,7 @@ public class InjectTypeCastForFunctionArgumentsRule 
implements IAlgebraicRewrite
         addFunctionAndArgChecker(BuiltinFunctions.IF_MISSING, null);
         addFunctionAndArgChecker(BuiltinFunctions.IF_NULL, null);
         addFunctionAndArgChecker(BuiltinFunctions.IF_MISSING_OR_NULL, null);
+        addFunctionAndArgChecker(BuiltinFunctions.IF_SYSTEM_NULL, null);
     }
 
     // allows the rule to check other functions in addition to the ones 
specified here

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/f2c18aa9/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/SetAsterixPhysicalOperatorsRule.java
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/SetAsterixPhysicalOperatorsRule.java
 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/SetAsterixPhysicalOperatorsRule.java
index fdebd14..4d1d532 100644
--- 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/SetAsterixPhysicalOperatorsRule.java
+++ 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/SetAsterixPhysicalOperatorsRule.java
@@ -363,19 +363,22 @@ public class SetAsterixPhysicalOperatorsRule implements 
IAlgebraicRewriteRule {
             LogicalVariable var = ((VariableReferenceExpression) 
orderExpr).getVariableReference();
             orderColumns.add(new OrderColumn(var, p.first.getKind()));
         }
-        boolean partitionMaterialization = false;
-        for (Mutable<ILogicalExpression> exprRef : winOp.getExpressions()) {
-            ILogicalExpression expr = exprRef.getValue();
-            if (expr.getExpressionTag() != LogicalExpressionTag.FUNCTION_CALL) 
{
-                throw new 
CompilationException(ErrorCode.COMPILATION_ILLEGAL_STATE, 
winOp.getSourceLocation(),
-                        expr.getExpressionTag());
-            }
-            AbstractFunctionCallExpression callExpr = 
(AbstractFunctionCallExpression) expr;
-            if 
(BuiltinFunctions.windowFunctionRequiresMaterialization(callExpr.getFunctionIdentifier()))
 {
-                partitionMaterialization = true;
-                break;
+        boolean partitionMaterialization = winOp.hasNestedPlans();
+        if (!partitionMaterialization) {
+            for (Mutable<ILogicalExpression> exprRef : winOp.getExpressions()) 
{
+                ILogicalExpression expr = exprRef.getValue();
+                if (expr.getExpressionTag() != 
LogicalExpressionTag.FUNCTION_CALL) {
+                    throw new 
CompilationException(ErrorCode.COMPILATION_ILLEGAL_STATE, 
winOp.getSourceLocation(),
+                            expr.getExpressionTag());
+                }
+                AbstractFunctionCallExpression callExpr = 
(AbstractFunctionCallExpression) expr;
+                if 
(BuiltinFunctions.windowFunctionRequiresMaterialization(callExpr.getFunctionIdentifier()))
 {
+                    partitionMaterialization = true;
+                    break;
+                }
             }
         }
+
         return new WindowPOperator(partitionColumns, partitionMaterialization, 
orderColumns);
     }
 }

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/f2c18aa9/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/SweepIllegalNonfunctionalFunctions.java
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/SweepIllegalNonfunctionalFunctions.java
 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/SweepIllegalNonfunctionalFunctions.java
index a4250c0..405ff73 100644
--- 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/SweepIllegalNonfunctionalFunctions.java
+++ 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/SweepIllegalNonfunctionalFunctions.java
@@ -322,11 +322,40 @@ public class SweepIllegalNonfunctionalFunctions 
implements IAlgebraicRewriteRule
             for (Pair<IOrder, Mutable<ILogicalExpression>> p : 
op.getOrderExpressions()) {
                 sweepExpression(p.second.getValue(), op);
             }
-            for (Mutable<ILogicalExpression> me : op.getExpressions()) {
+            for (Pair<IOrder, Mutable<ILogicalExpression>> p : 
op.getFrameValueExpressions()) {
+                sweepExpression(p.second.getValue(), op);
+            }
+            for (Mutable<ILogicalExpression> me : 
op.getFrameStartExpressions()) {
+                sweepExpression(me.getValue(), op);
+            }
+            for (Mutable<ILogicalExpression> me : op.getFrameEndExpressions()) 
{
+                sweepExpression(me.getValue(), op);
+            }
+            for (Mutable<ILogicalExpression> me : 
op.getFrameExcludeExpressions()) {
                 sweepExpression(me.getValue(), op);
             }
+            ILogicalExpression frameOffset = op.getFrameOffset().getValue();
+            if (frameOffset != null) {
+                sweepExpression(frameOffset, op);
+            }
+            for (Mutable<ILogicalExpression> me : op.getExpressions()) {
+                ILogicalExpression expr = me.getValue();
+                if (isStatefulFunctionCall(expr)) {
+                    for (Mutable<ILogicalExpression> fcallArg : 
((AbstractFunctionCallExpression) expr)
+                            .getArguments()) {
+                        sweepExpression(fcallArg.getValue(), op);
+                    }
+                } else {
+                    throw new 
CompilationException(ErrorCode.COMPILATION_ILLEGAL_STATE, 
op.getSourceLocation());
+                }
+            }
             return null;
         }
-    }
 
+        private boolean isStatefulFunctionCall(ILogicalExpression expr) {
+            return expr.getExpressionTag() == 
LogicalExpressionTag.FUNCTION_CALL
+                    && ((AbstractFunctionCallExpression) expr)
+                            .getKind() == 
AbstractFunctionCallExpression.FunctionKind.STATEFUL;
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/f2c18aa9/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/subplan/InlineAllNtsInSubplanVisitor.java
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/subplan/InlineAllNtsInSubplanVisitor.java
 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/subplan/InlineAllNtsInSubplanVisitor.java
index c540bbc..f21eb42 100644
--- 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/subplan/InlineAllNtsInSubplanVisitor.java
+++ 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/subplan/InlineAllNtsInSubplanVisitor.java
@@ -354,7 +354,7 @@ class InlineAllNtsInSubplanVisitor implements 
IQueryOperatorVisitor<ILogicalOper
         op.getInputs().clear();
         ILogicalOperator currentOp = op;
         if (!orderingExprs.isEmpty()) {
-            OrderOperator orderOp = new 
OrderOperator(cloneOrderingExpression(orderingExprs));
+            OrderOperator orderOp = new 
OrderOperator(OperatorManipulationUtil.cloneOrderExpressions(orderingExprs));
             orderOp.setSourceLocation(sourceLoc);
             op.getInputs().add(new MutableObject<>(orderOp));
             currentOp = orderOp;
@@ -473,7 +473,7 @@ class InlineAllNtsInSubplanVisitor implements 
IQueryOperatorVisitor<ILogicalOper
         }
 
         orderingExprs.clear();
-        
orderingExprs.addAll(cloneOrderingExpression(op.getOrderExpressions()));
+        
orderingExprs.addAll(OperatorManipulationUtil.cloneOrderExpressions(op.getOrderExpressions()));
 
         List<Pair<IOrder, Mutable<ILogicalExpression>>> orderExprList = new 
ArrayList<>();
         // Adds keyVars to the prefix of sorting columns.
@@ -764,16 +764,6 @@ class InlineAllNtsInSubplanVisitor implements 
IQueryOperatorVisitor<ILogicalOper
         }
     }
 
-    private List<Pair<IOrder, Mutable<ILogicalExpression>>> 
cloneOrderingExpression(
-            List<Pair<IOrder, Mutable<ILogicalExpression>>> orderExprs) {
-        List<Pair<IOrder, Mutable<ILogicalExpression>>> clonedOrderExprs = new 
ArrayList<>();
-        for (Pair<IOrder, Mutable<ILogicalExpression>> orderExpr : orderExprs) 
{
-            clonedOrderExprs.add(
-                    new Pair<>(orderExpr.first, new 
MutableObject<>(orderExpr.second.getValue().cloneExpression())));
-        }
-        return clonedOrderExprs;
-    }
-
     private void addPrimaryKeys(Map<LogicalVariable, LogicalVariable> varMap) {
         for (Entry<LogicalVariable, LogicalVariable> entry : 
varMap.entrySet()) {
             List<LogicalVariable> dependencyVars = 
context.findPrimaryKey(entry.getKey());

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/f2c18aa9/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/LangExpressionToPlanTranslator.java
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/LangExpressionToPlanTranslator.java
 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/LangExpressionToPlanTranslator.java
index c320bd3..e3745f7 100644
--- 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/LangExpressionToPlanTranslator.java
+++ 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/LangExpressionToPlanTranslator.java
@@ -909,18 +909,9 @@ class LangExpressionToPlanTranslator
     private AbstractFunctionCallExpression lookupBuiltinFunction(String 
functionName, int arity,
             List<Mutable<ILogicalExpression>> args, SourceLocation sourceLoc) {
         AbstractFunctionCallExpression f;
-        FunctionIdentifier fi = new 
FunctionIdentifier(AlgebricksBuiltinFunctions.ALGEBRICKS_NS, functionName, 
arity);
-        FunctionInfo afi = BuiltinFunctions.lookupFunction(fi);
-        FunctionIdentifier builtinAquafi = afi == null ? null : 
afi.getFunctionIdentifier();
-
-        if (builtinAquafi != null) {
-            fi = builtinAquafi;
-        } else {
-            fi = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, 
functionName, arity);
-            afi = BuiltinFunctions.lookupFunction(fi);
-            if (afi == null) {
-                return null;
-            }
+        FunctionIdentifier fi = getBuiltinFunctionIdentifier(functionName, 
arity);
+        if (fi == null) {
+            return null;
         }
         if (BuiltinFunctions.isBuiltinAggregateFunction(fi)) {
             f = BuiltinFunctions.makeAggregateFunctionExpression(fi, args);
@@ -929,7 +920,7 @@ class LangExpressionToPlanTranslator
                     new 
UnnestingFunctionCallExpression(FunctionUtil.getFunctionInfo(fi), args);
             
ufce.setReturnsUniqueValues(BuiltinFunctions.returnsUniqueValues(fi));
             f = ufce;
-        } else if (BuiltinFunctions.isBuiltinWindowFunction(fi)) {
+        } else if (BuiltinFunctions.isWindowFunction(fi)) {
             f = BuiltinFunctions.makeWindowFunctionExpression(fi, args);
         } else {
             f = new 
ScalarFunctionCallExpression(FunctionUtil.getFunctionInfo(fi), args);
@@ -938,6 +929,23 @@ class LangExpressionToPlanTranslator
         return f;
     }
 
+    protected FunctionIdentifier getBuiltinFunctionIdentifier(String 
functionName, int arity) {
+        FunctionIdentifier fi = new 
FunctionIdentifier(AlgebricksBuiltinFunctions.ALGEBRICKS_NS, functionName, 
arity);
+        FunctionInfo afi = BuiltinFunctions.lookupFunction(fi);
+        FunctionIdentifier builtinAquafi = afi == null ? null : 
afi.getFunctionIdentifier();
+
+        if (builtinAquafi != null) {
+            fi = builtinAquafi;
+        } else {
+            fi = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, 
functionName, arity);
+            afi = BuiltinFunctions.lookupFunction(fi);
+            if (afi == null) {
+                return null;
+            }
+        }
+        return fi;
+    }
+
     @Override
     public Pair<ILogicalOperator, LogicalVariable> visit(FunctionDecl fd, 
Mutable<ILogicalOperator> tupSource) {
         throw new IllegalStateException("Function declarations should be 
inlined at AST rewriting phase.");
@@ -950,22 +958,9 @@ class LangExpressionToPlanTranslator
         Mutable<ILogicalOperator> topOp = tupSource;
         LogicalVariable groupRecordVar = null;
         if (gc.hasGroupVar()) {
-            List<Pair<Expression, Identifier>> groupFieldList = 
gc.getGroupFieldList();
-            List<Mutable<ILogicalExpression>> groupRecordConstructorArgList = 
new ArrayList<>();
-            for (Pair<Expression, Identifier> groupField : groupFieldList) {
-                ILogicalExpression groupFieldNameExpr =
-                        langExprToAlgExpression(new LiteralExpr(new 
StringLiteral(groupField.second.getValue())),
-                                topOp).first;
-                groupRecordConstructorArgList.add(new 
MutableObject<>(groupFieldNameExpr));
-                ILogicalExpression groupFieldExpr = 
langExprToAlgExpression(groupField.first, topOp).first;
-                groupRecordConstructorArgList.add(new 
MutableObject<>(groupFieldExpr));
-            }
-            ScalarFunctionCallExpression groupRecordConstr = new 
ScalarFunctionCallExpression(
-                    
FunctionUtil.getFunctionInfo(BuiltinFunctions.OPEN_RECORD_CONSTRUCTOR),
-                    groupRecordConstructorArgList);
-            groupRecordConstr.setSourceLocation(sourceLoc);
-
             groupRecordVar = context.newVar();
+            AbstractFunctionCallExpression groupRecordConstr =
+                    createRecordConstructor(gc.getGroupFieldList(), topOp, 
sourceLoc);
             AssignOperator groupRecordVarAssignOp =
                     new AssignOperator(groupRecordVar, new 
MutableObject<>(groupRecordConstr));
             groupRecordVarAssignOp.getInputs().add(topOp);
@@ -981,12 +976,14 @@ class LangExpressionToPlanTranslator
             gOp.addGbyExpression(v, eo.first);
             topOp = eo.second;
         }
-        for (GbyVariableExpressionPair ve : gc.getDecorPairList()) {
-            VariableExpr vexpr = ve.getVar();
-            LogicalVariable v = vexpr == null ? context.newVar() : 
context.newVarFromExpression(vexpr);
-            Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo = 
langExprToAlgExpression(ve.getExpr(), topOp);
-            gOp.addDecorExpression(v, eo.first);
-            topOp = eo.second;
+        if (gc.hasDecorList()) {
+            for (GbyVariableExpressionPair ve : gc.getDecorPairList()) {
+                VariableExpr vexpr = ve.getVar();
+                LogicalVariable v = vexpr == null ? context.newVar() : 
context.newVarFromExpression(vexpr);
+                Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo = 
langExprToAlgExpression(ve.getExpr(), topOp);
+                gOp.addDecorExpression(v, eo.first);
+                topOp = eo.second;
+            }
         }
 
         gOp.getInputs().add(topOp);
@@ -1026,7 +1023,23 @@ class LangExpressionToPlanTranslator
         return new Pair<>(gOp, null);
     }
 
-    private ILogicalPlan createNestedPlanWithAggregate(LogicalVariable 
aggOutputVar, FunctionIdentifier aggFunc,
+    protected AbstractFunctionCallExpression 
createRecordConstructor(List<Pair<Expression, Identifier>> fieldList,
+            Mutable<ILogicalOperator> inputOp, SourceLocation sourceLoc) 
throws CompilationException {
+        List<Mutable<ILogicalExpression>> args = new ArrayList<>();
+        for (Pair<Expression, Identifier> field : fieldList) {
+            ILogicalExpression fieldNameExpr =
+                    langExprToAlgExpression(new LiteralExpr(new 
StringLiteral(field.second.getValue())), inputOp).first;
+            args.add(new MutableObject<>(fieldNameExpr));
+            ILogicalExpression fieldExpr = 
langExprToAlgExpression(field.first, inputOp).first;
+            args.add(new MutableObject<>(fieldExpr));
+        }
+        ScalarFunctionCallExpression recordConstr = new 
ScalarFunctionCallExpression(
+                
FunctionUtil.getFunctionInfo(BuiltinFunctions.OPEN_RECORD_CONSTRUCTOR), args);
+        recordConstr.setSourceLocation(sourceLoc);
+        return recordConstr;
+    }
+
+    protected ILogicalPlan createNestedPlanWithAggregate(LogicalVariable 
aggOutputVar, FunctionIdentifier aggFunc,
             ILogicalExpression aggFnInput, Mutable<ILogicalOperator> 
aggOpInput) {
         SourceLocation sourceLoc = aggFnInput.getSourceLocation();
         AggregateFunctionCallExpression aggFnCall = 
BuiltinFunctions.makeAggregateFunctionExpression(aggFunc,
@@ -1530,7 +1543,7 @@ class LangExpressionToPlanTranslator
         return createFunctionCallExpression(fid, sourceLoc);
     }
 
-    private static AbstractFunctionCallExpression 
createFunctionCallExpression(FunctionIdentifier fid,
+    protected static AbstractFunctionCallExpression 
createFunctionCallExpression(FunctionIdentifier fid,
             SourceLocation sourceLoc) {
         ScalarFunctionCallExpression callExpr = new 
ScalarFunctionCallExpression(FunctionUtil.getFunctionInfo(fid));
         callExpr.setSourceLocation(sourceLoc);

Reply via email to