You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@asterixdb.apache.org by dl...@apache.org on 2020/08/17 18:44:33 UTC

[asterixdb] branch master updated: [NO ISSUE] Added Optimized Interval Joins

This is an automated email from the ASF dual-hosted git repository.

dlych pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/asterixdb.git


The following commit(s) were added to refs/heads/master by this push:
     new 8d9c57a  [NO ISSUE] Added Optimized Interval Joins
8d9c57a is described below

commit 8d9c57abe191b76dd976d7ab2f611ae1beb7bf6e
Author: Caleb Herbel <ca...@gmail.com>
AuthorDate: Fri Aug 14 20:41:13 2020 -0600

    [NO ISSUE] Added Optimized Interval Joins
    
    - user model changes: no
    - storage format changes: no
    - interface changes: no
    
    details:
    -Support for optimized interval joins over the 7 of the 13 Allen's relations: Before, After, Covers, Covered_by, Overlaps, Overlapping, and Overlapped_by. Starts, Started_by, ends, ended_by, meets, and met_by are not yet implemented and will default to Hybrid Hash Join.
    -Adds a RangeHint
    -Updates Optimizer tests for interval joins
    -Updates interval join runtime tests to include range hints, tests for time and datetime, and a new data point that tests for additional cases
    -Support for PartialBroadcastRangeFollowingExchange and PartialBroadcastRangeIntersectExchange physical operators
    -Adds IntervalMergeJoinPOperator and a IntervalMergeJoin Operator Descriptor with a IntervalMergeJoin algorithm and supporting files
    -Adds a RunFileStream, RunFilePointer, and a TupleAccessor
    
    Change-Id: Ib90a953881461f8574f1170ad2264b95fa81fd4b
    Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/7163
    Integration-Tests: Jenkins <je...@fulliautomatix.ics.uci.edu>
    Tested-by: Jenkins <je...@fulliautomatix.ics.uci.edu>
    Reviewed-by: Dmitry Lychagin <dm...@couchbase.com>
---
 .../physical/IntervalMergeJoinPOperator.java       | 195 +++++++++++++++
 .../rules/SetAsterixPhysicalOperatorsRule.java     |  23 ++
 .../optimizer/rules/util/AsterixJoinUtils.java     |  83 +++++++
 .../optimizer/rules/util/IntervalJoinUtils.java    | 251 ++++++++++++++++++++
 .../optimizer/rules/util/IntervalPartitions.java   |  82 +++++++
 asterixdb/asterix-app/data/tinycollege/staff.adm   |  15 +-
 .../asterix-app/data/tinycollege/students.adm      |  14 +-
 .../interval_after/interval_after.3.query.sqlpp    |  10 +-
 .../interval_before/interval_before.3.query.sqlpp  |   8 +-
 .../interval_covered_by.3.query.sqlpp              |  10 +-
 .../interval_covers/interval_covers.3.query.sqlpp  |  10 +-
 .../interval_ended_by.3.query.sqlpp                |  12 +-
 .../interval_ends/interval_ends.3.query.sqlpp      |  12 +-
 .../interval_meets/interval_meets.3.query.sqlpp    |  12 +-
 .../interval_met_by/interval_met_by.3.query.sqlpp  |  12 +-
 .../interval_overlapped_by.3.query.sqlpp           |  10 +-
 .../interval_overlapping.3.query.sqlpp             |  10 +-
 .../interval_overlaps.3.query.sqlpp                |  10 +-
 .../interval_started_by.3.query.sqlpp              |  12 +-
 .../interval_starts/interval_starts.3.query.sqlpp  |  12 +-
 .../interval_after/interval_after.3.query.plan     |  45 ++--
 .../interval_before/interval_before.3.query.plan   |  38 +--
 .../interval_covered_by.3.query.plan               |  38 +--
 .../interval_covers/interval_covers.3.query.plan   |  38 +--
 .../interval_overlapped_by.3.query.plan            |  38 +--
 .../interval_overlapping.3.query.plan              |  38 +--
 .../interval_overlaps.3.query.plan                 |  38 +--
 .../interval_after/interval_after.1.ddl.sqlpp      |  11 +-
 ...5.query.sqlpp => interval_after.10.query.sqlpp} |   6 +-
 .../interval_after.11.query.sqlpp}                 |   6 +-
 .../interval_after.12.query.sqlpp}                 |   6 +-
 ...5.query.sqlpp => interval_after.13.query.sqlpp} |   6 +-
 ...5.query.sqlpp => interval_after.14.query.sqlpp} |   6 +-
 .../interval_after/interval_after.2.update.sqlpp   |   2 +-
 .../interval_after/interval_after.3.query.sqlpp    |   6 +-
 .../interval_after/interval_after.4.query.sqlpp    |   6 +-
 .../interval_after/interval_after.5.query.sqlpp    |   6 +-
 .../interval_after/interval_after.6.query.sqlpp    |   6 +-
 .../interval_after.7.query.sqlpp}                  |   6 +-
 .../interval_after.8.query.sqlpp}                  |   6 +-
 ....5.query.sqlpp => interval_after.9.query.sqlpp} |   6 +-
 .../interval_before/interval_before.1.ddl.sqlpp    |  10 +-
 .../interval_before.10.query.sqlpp}                |   6 +-
 ....query.sqlpp => interval_before.11.query.sqlpp} |   6 +-
 ....query.sqlpp => interval_before.12.query.sqlpp} |   6 +-
 .../interval_before.13.query.sqlpp}                |   6 +-
 .../interval_before.14.query.sqlpp}                |   6 +-
 .../interval_before/interval_before.2.update.sqlpp |   2 +-
 .../interval_before/interval_before.3.query.sqlpp  |   6 +-
 .../interval_before/interval_before.4.query.sqlpp  |   6 +-
 .../interval_before/interval_before.5.query.sqlpp  |   6 +-
 .../interval_before/interval_before.6.query.sqlpp  |   6 +-
 ...3.query.sqlpp => interval_before.7.query.sqlpp} |   6 +-
 ...3.query.sqlpp => interval_before.8.query.sqlpp} |   6 +-
 .../interval_before.9.query.sqlpp}                 |   6 +-
 .../interval_covered_by.1.ddl.sqlpp                |  10 +-
 .../interval_covered_by.10.query.sqlpp}            |   6 +-
 .../interval_covered_by.11.query.sqlpp}            |   6 +-
 .../interval_covered_by.12.query.sqlpp}            |   6 +-
 .../interval_covered_by.13.query.sqlpp}            |   6 +-
 .../interval_covered_by.14.query.sqlpp}            |   6 +-
 .../interval_covered_by.2.update.sqlpp             |   2 +-
 .../interval_covered_by.3.query.sqlpp              |   6 +-
 .../interval_covered_by.4.query.sqlpp              |   6 +-
 .../interval_covered_by.5.query.sqlpp              |   6 +-
 .../interval_covered_by.6.query.sqlpp              |   6 +-
 .../interval_covered_by.7.query.sqlpp}             |   6 +-
 .../interval_covered_by.8.query.sqlpp}             |   6 +-
 .../interval_covered_by.9.query.sqlpp}             |   6 +-
 .../interval_covers/interval_covers.1.ddl.sqlpp    |  10 +-
 .../interval_covers.10.query.sqlpp}                |   6 +-
 .../interval_covers.11.query.sqlpp}                |   6 +-
 .../interval_covers.12.query.sqlpp}                |   6 +-
 .../interval_covers.13.query.sqlpp}                |   6 +-
 .../interval_covers.14.query.sqlpp}                |   6 +-
 .../interval_covers/interval_covers.2.update.sqlpp |   2 +-
 .../interval_covers/interval_covers.3.query.sqlpp  |   6 +-
 .../interval_covers/interval_covers.4.query.sqlpp  |   6 +-
 .../interval_covers/interval_covers.5.query.sqlpp  |   6 +-
 .../interval_covers/interval_covers.6.query.sqlpp  |   6 +-
 .../interval_covers.7.query.sqlpp}                 |   6 +-
 .../interval_covers.8.query.sqlpp}                 |   6 +-
 .../interval_covers.9.query.sqlpp}                 |   6 +-
 .../interval_ended_by.1.ddl.sqlpp                  |  12 +-
 .../interval_ended_by.10.query.sqlpp}              |   8 +-
 .../interval_ended_by.11.query.sqlpp}              |   8 +-
 .../interval_ended_by.12.query.sqlpp}              |   8 +-
 .../interval_ended_by.13.query.sqlpp}              |   8 +-
 .../interval_ended_by.14.query.sqlpp}              |   8 +-
 .../interval_ended_by.2.update.sqlpp               |   4 +-
 .../interval_ended_by.3.query.sqlpp                |   8 +-
 .../interval_ended_by.4.query.sqlpp                |   8 +-
 .../interval_ended_by.5.query.sqlpp                |   8 +-
 .../interval_ended_by.6.query.sqlpp                |   8 +-
 .../interval_ended_by.7.query.sqlpp}               |   8 +-
 .../interval_ended_by.8.query.sqlpp}               |   8 +-
 .../interval_ended_by.9.query.sqlpp}               |   8 +-
 .../interval_ends/interval_ends.1.ddl.sqlpp        |  12 +-
 .../interval_ends.10.query.sqlpp}                  |   8 +-
 .../interval_ends.11.query.sqlpp}                  |   8 +-
 .../interval_ends.12.query.sqlpp}                  |   8 +-
 .../interval_ends.13.query.sqlpp}                  |   8 +-
 .../interval_ends.14.query.sqlpp}                  |   8 +-
 .../interval_ends/interval_ends.2.update.sqlpp     |   4 +-
 .../interval_ends/interval_ends.3.query.sqlpp      |   8 +-
 .../interval_ends/interval_ends.4.query.sqlpp      |   8 +-
 .../interval_ends/interval_ends.5.query.sqlpp      |   8 +-
 .../interval_ends/interval_ends.6.query.sqlpp      |   8 +-
 .../interval_ends.7.query.sqlpp}                   |   8 +-
 .../interval_ends.8.query.sqlpp}                   |   8 +-
 .../interval_ends.9.query.sqlpp}                   |   8 +-
 .../interval_meets/interval_meets.1.ddl.sqlpp      |  12 +-
 .../interval_meets.10.query.sqlpp}                 |   8 +-
 .../interval_meets.11.query.sqlpp}                 |   8 +-
 .../interval_meets.12.query.sqlpp}                 |   8 +-
 .../interval_meets.13.query.sqlpp}                 |   8 +-
 .../interval_meets.14.query.sqlpp}                 |   8 +-
 .../interval_meets/interval_meets.2.update.sqlpp   |   4 +-
 .../interval_meets/interval_meets.3.query.sqlpp    |   8 +-
 .../interval_meets/interval_meets.4.query.sqlpp    |   8 +-
 .../interval_meets/interval_meets.5.query.sqlpp    |   8 +-
 .../interval_meets/interval_meets.6.query.sqlpp    |   8 +-
 .../interval_meets.7.query.sqlpp}                  |   8 +-
 .../interval_meets.8.query.sqlpp}                  |   8 +-
 .../interval_meets.9.query.sqlpp}                  |   8 +-
 .../interval_met_by/interval_met_by.1.ddl.sqlpp    |  12 +-
 .../interval_met_by.10.query.sqlpp}                |   8 +-
 .../interval_met_by.11.query.sqlpp}                |   8 +-
 .../interval_met_by.12.query.sqlpp}                |   8 +-
 .../interval_met_by.13.query.sqlpp}                |   8 +-
 .../interval_met_by.14.query.sqlpp}                |   8 +-
 .../interval_met_by/interval_met_by.2.update.sqlpp |   4 +-
 .../interval_met_by/interval_met_by.3.query.sqlpp  |   8 +-
 .../interval_met_by/interval_met_by.4.query.sqlpp  |   8 +-
 .../interval_met_by/interval_met_by.5.query.sqlpp  |   8 +-
 .../interval_met_by/interval_met_by.6.query.sqlpp  |   8 +-
 .../interval_met_by.7.query.sqlpp}                 |   8 +-
 .../interval_met_by.8.query.sqlpp}                 |   8 +-
 .../interval_met_by.9.query.sqlpp}                 |   8 +-
 .../interval_overlapped_by.1.ddl.sqlpp             |  10 +-
 .../interval_overlapped_by.10.query.sqlpp}         |   6 +-
 .../interval_overlapped_by.11.query.sqlpp}         |   6 +-
 .../interval_overlapped_by.12.query.sqlpp}         |   6 +-
 .../interval_overlapped_by.13.query.sqlpp}         |   6 +-
 .../interval_overlapped_by.14.query.sqlpp}         |   6 +-
 .../interval_overlapped_by.2.update.sqlpp          |   2 +-
 .../interval_overlapped_by.3.query.sqlpp           |   6 +-
 .../interval_overlapped_by.4.query.sqlpp           |   6 +-
 .../interval_overlapped_by.5.query.sqlpp           |   6 +-
 .../interval_overlapped_by.6.query.sqlpp           |   6 +-
 .../interval_overlapped_by.7.query.sqlpp}          |   6 +-
 .../interval_overlapped_by.8.query.sqlpp}          |   6 +-
 .../interval_overlapped_by.9.query.sqlpp}          |   6 +-
 .../interval_overlapping.1.ddl.sqlpp               |  10 +-
 .../interval_overlapping.10.query.sqlpp}           |   6 +-
 .../interval_overlapping.11.query.sqlpp}           |   6 +-
 .../interval_overlapping.12.query.sqlpp}           |   6 +-
 .../interval_overlapping.13.query.sqlpp}           |   6 +-
 .../interval_overlapping.14.query.sqlpp}           |   6 +-
 .../interval_overlapping.2.update.sqlpp            |   2 +-
 .../interval_overlapping.3.query.sqlpp             |   6 +-
 .../interval_overlapping.4.query.sqlpp             |   6 +-
 .../interval_overlapping.5.query.sqlpp             |   6 +-
 .../interval_overlapping.6.query.sqlpp             |   6 +-
 .../interval_overlapping.7.query.sqlpp}            |   6 +-
 .../interval_overlapping.8.query.sqlpp}            |   6 +-
 .../interval_overlapping.9.query.sqlpp}            |   6 +-
 .../interval_overlaps.1.ddl.sqlpp                  |  10 +-
 .../interval_overlaps.10.query.sqlpp}              |   6 +-
 .../interval_overlaps.11.query.sqlpp}              |   6 +-
 .../interval_overlaps.12.query.sqlpp}              |   6 +-
 .../interval_overlaps.13.query.sqlpp}              |   6 +-
 .../interval_overlaps.14.query.sqlpp}              |   6 +-
 .../interval_overlaps.2.update.sqlpp               |   2 +-
 .../interval_overlaps.3.query.sqlpp                |   6 +-
 .../interval_overlaps.4.query.sqlpp                |   6 +-
 .../interval_overlaps.5.query.sqlpp                |   6 +-
 .../interval_overlaps.6.query.sqlpp                |   6 +-
 .../interval_overlaps.7.query.sqlpp}               |   6 +-
 .../interval_overlaps.8.query.sqlpp}               |   6 +-
 .../interval_overlaps.9.query.sqlpp}               |   6 +-
 .../interval_started_by.1.ddl.sqlpp                |  12 +-
 .../interval_started_by.10.query.sqlpp}            |   8 +-
 .../interval_started_by.11.query.sqlpp}            |   8 +-
 .../interval_started_by.12.query.sqlpp}            |   8 +-
 .../interval_started_by.13.query.sqlpp}            |   8 +-
 .../interval_started_by.14.query.sqlpp}            |   8 +-
 .../interval_started_by.2.update.sqlpp             |   4 +-
 .../interval_started_by.3.query.sqlpp              |   8 +-
 .../interval_started_by.4.query.sqlpp              |   8 +-
 .../interval_started_by.5.query.sqlpp              |   8 +-
 .../interval_started_by.6.query.sqlpp              |   8 +-
 .../interval_started_by.7.query.sqlpp}             |   8 +-
 .../interval_started_by.8.query.sqlpp}             |   8 +-
 .../interval_started_by.9.query.sqlpp}             |   8 +-
 .../interval_starts/interval_starts.1.ddl.sqlpp    |  12 +-
 .../interval_starts.10.query.sqlpp}                |   8 +-
 .../interval_starts.11.query.sqlpp}                |   8 +-
 .../interval_starts.12.query.sqlpp}                |   8 +-
 .../interval_starts.13.query.sqlpp}                |   8 +-
 .../interval_starts.14.query.sqlpp}                |   8 +-
 .../interval_starts/interval_starts.2.update.sqlpp |   4 +-
 .../interval_starts/interval_starts.3.query.sqlpp  |   8 +-
 .../interval_starts/interval_starts.4.query.sqlpp  |   8 +-
 .../interval_starts/interval_starts.5.query.sqlpp  |   8 +-
 .../interval_starts/interval_starts.6.query.sqlpp  |   8 +-
 .../interval_starts.7.query.sqlpp}                 |   8 +-
 .../interval_starts.8.query.sqlpp}                 |   8 +-
 .../interval_starts.9.query.sqlpp}                 |   8 +-
 .../interval_after.10.adm}                         |   2 +-
 .../interval_after/interval_after.11.adm           |   9 +
 .../interval_after.12.adm}                         |   2 +-
 .../interval_after/interval_after.13.adm           |   9 +
 .../interval_after.14.adm}                         |   2 +-
 .../interval_after/interval_after.3.adm            |  12 +-
 .../interval_after/interval_after.5.adm            |  12 +-
 .../interval_after/interval_after.7.adm            |   9 +
 .../interval_after.8.adm}                          |   2 +-
 .../interval_after/interval_after.9.adm            |   9 +
 .../interval_before/interval_before.10.adm         |   9 +
 ...nterval_before.3.adm => interval_before.11.adm} |   2 +-
 .../interval_before/interval_before.12.adm         |   9 +
 ...nterval_before.3.adm => interval_before.13.adm} |   2 +-
 .../interval_before/interval_before.14.adm         |   9 +
 .../interval_before/interval_before.3.adm          |   2 +-
 .../interval_before/interval_before.4.adm          |  12 +-
 .../interval_before/interval_before.5.adm          |   2 +-
 .../interval_before/interval_before.6.adm          |  12 +-
 ...interval_before.3.adm => interval_before.7.adm} |   2 +-
 .../interval_before/interval_before.8.adm          |   9 +
 ...interval_before.3.adm => interval_before.9.adm} |   2 +-
 ...covered_by.4.adm => interval_covered_by.10.adm} |   6 +-
 .../interval_covered_by/interval_covered_by.11.adm |   4 +
 ...covered_by.4.adm => interval_covered_by.12.adm} |   6 +-
 .../interval_covered_by/interval_covered_by.13.adm |   4 +
 ...covered_by.4.adm => interval_covered_by.14.adm} |   6 +-
 .../interval_covered_by/interval_covered_by.4.adm  |   6 +-
 .../interval_covered_by/interval_covered_by.6.adm  |   6 +-
 .../interval_covered_by/interval_covered_by.7.adm  |   4 +
 ..._covered_by.4.adm => interval_covered_by.8.adm} |   6 +-
 .../interval_covered_by/interval_covered_by.9.adm  |   4 +
 .../interval_covers/interval_covers.10.adm         |   4 +
 .../interval_covers.11.adm}                        |   6 +-
 .../interval_covers/interval_covers.12.adm         |   4 +
 .../interval_covers.13.adm}                        |   6 +-
 .../interval_covers/interval_covers.14.adm         |   4 +
 .../interval_covers/interval_covers.3.adm          |   6 +-
 .../interval_covers/interval_covers.5.adm          |   6 +-
 .../interval_covers.7.adm}                         |   6 +-
 .../interval_covers/interval_covers.8.adm          |   4 +
 .../interval_covers.9.adm}                         |   6 +-
 ...val_ended_by.4.adm => interval_ended_by.10.adm} |   4 +-
 .../interval_ended_by/interval_ended_by.11.adm     |   1 +
 ...val_ended_by.4.adm => interval_ended_by.12.adm} |   4 +-
 .../interval_ended_by/interval_ended_by.13.adm     |   1 +
 ...val_ended_by.4.adm => interval_ended_by.14.adm} |   4 +-
 .../interval_ended_by/interval_ended_by.4.adm      |   4 +-
 .../interval_ended_by/interval_ended_by.6.adm      |   4 +-
 .../interval_ended_by/interval_ended_by.7.adm      |   1 +
 ...rval_ended_by.4.adm => interval_ended_by.8.adm} |   4 +-
 .../interval_ended_by/interval_ended_by.9.adm      |   1 +
 .../interval_ends/interval_ends.10.adm             |   1 +
 .../interval_ends.11.adm}                          |   4 +-
 .../interval_ends/interval_ends.12.adm             |   1 +
 .../interval_ends.13.adm}                          |   4 +-
 .../interval_ends/interval_ends.14.adm             |   1 +
 .../interval_ends/interval_ends.3.adm              |   4 +-
 .../interval_ends/interval_ends.5.adm              |   4 +-
 .../interval_ends.7.adm}                           |   4 +-
 .../interval_ends/interval_ends.8.adm              |   1 +
 .../interval_ends.9.adm}                           |   4 +-
 .../interval_meets/interval_meets.10.adm           |   4 +
 ...{interval_meets.3.adm => interval_meets.11.adm} |   1 +
 .../interval_meets/interval_meets.12.adm           |   4 +
 ...{interval_meets.3.adm => interval_meets.13.adm} |   1 +
 .../interval_meets/interval_meets.14.adm           |   4 +
 .../interval_meets/interval_meets.3.adm            |   1 +
 .../interval_meets/interval_meets.5.adm            |   1 +
 .../{interval_meets.3.adm => interval_meets.7.adm} |   1 +
 .../interval_meets/interval_meets.8.adm            |   4 +
 .../{interval_meets.3.adm => interval_meets.9.adm} |   1 +
 .../interval_met_by.10.adm}                        |   1 +
 .../interval_met_by/interval_met_by.11.adm         |   4 +
 .../interval_met_by.12.adm}                        |   1 +
 .../interval_met_by/interval_met_by.13.adm         |   4 +
 .../interval_met_by.14.adm}                        |   1 +
 .../interval_met_by/interval_met_by.4.adm          |   1 +
 .../interval_met_by/interval_met_by.6.adm          |   1 +
 .../interval_met_by/interval_met_by.7.adm          |   4 +
 .../interval_met_by.8.adm}                         |   1 +
 .../interval_met_by/interval_met_by.9.adm          |   4 +
 ...pped_by.4.adm => interval_overlapped_by.10.adm} |   2 +
 .../interval_overlapped_by.11.adm                  |  10 +
 ...pped_by.4.adm => interval_overlapped_by.12.adm} |   2 +
 .../interval_overlapped_by.13.adm                  |  10 +
 ...pped_by.4.adm => interval_overlapped_by.14.adm} |   2 +
 .../interval_overlapped_by.4.adm                   |   2 +
 .../interval_overlapped_by.6.adm                   |   2 +
 .../interval_overlapped_by.7.adm                   |  10 +
 ...apped_by.4.adm => interval_overlapped_by.8.adm} |   2 +
 .../interval_overlapped_by.9.adm                   |  10 +
 ...erlapping.3.adm => interval_overlapping.10.adm} |   8 +-
 ...erlapping.3.adm => interval_overlapping.11.adm} |   8 +-
 ...erlapping.3.adm => interval_overlapping.12.adm} |   8 +-
 ...erlapping.3.adm => interval_overlapping.13.adm} |   8 +-
 ...erlapping.3.adm => interval_overlapping.14.adm} |   8 +-
 .../interval_overlapping.3.adm                     |   8 +-
 .../interval_overlapping.4.adm                     |   8 +-
 .../interval_overlapping.5.adm                     |   8 +-
 .../interval_overlapping.6.adm                     |   8 +-
 ...verlapping.3.adm => interval_overlapping.7.adm} |   8 +-
 ...verlapping.3.adm => interval_overlapping.8.adm} |   8 +-
 ...verlapping.3.adm => interval_overlapping.9.adm} |   8 +-
 .../interval_overlaps/interval_overlaps.10.adm     |  10 +
 .../interval_overlaps.11.adm}                      |   2 +
 .../interval_overlaps/interval_overlaps.12.adm     |  10 +
 .../interval_overlaps.13.adm}                      |   2 +
 .../interval_overlaps/interval_overlaps.14.adm     |  10 +
 .../interval_overlaps/interval_overlaps.3.adm      |   2 +
 .../interval_overlaps/interval_overlaps.5.adm      |   2 +
 .../interval_overlaps.7.adm}                       |   2 +
 .../interval_overlaps/interval_overlaps.8.adm      |  10 +
 .../interval_overlaps.9.adm}                       |   2 +
 .../interval_started_by/interval_started_by.10.adm |   1 +
 .../interval_started_by/interval_started_by.11.adm |   4 +
 .../interval_started_by/interval_started_by.12.adm |   1 +
 .../interval_started_by/interval_started_by.13.adm |   4 +
 .../interval_started_by/interval_started_by.14.adm |   1 +
 .../interval_started_by/interval_started_by.7.adm  |   4 +
 .../interval_started_by/interval_started_by.8.adm  |   1 +
 .../interval_started_by/interval_started_by.9.adm  |   4 +
 .../interval_starts/interval_starts.10.adm         |   4 +
 .../interval_starts/interval_starts.11.adm         |   1 +
 .../interval_starts/interval_starts.12.adm         |   4 +
 .../interval_starts/interval_starts.13.adm         |   1 +
 .../interval_starts/interval_starts.14.adm         |   4 +
 .../interval_starts/interval_starts.7.adm          |   1 +
 .../interval_starts/interval_starts.8.adm          |   4 +
 .../interval_starts/interval_starts.9.adm          |   1 +
 .../test/resources/runtimets/testsuite_sqlpp.xml   |   4 +-
 .../common/annotations/RangeAnnotation.java}       |  45 ++--
 .../asterix-lang-sqlpp/src/main/javacc/SQLPP.jj    |  39 +--
 .../functions/temporal/IntervalLogic.java          |  30 +--
 .../IntervalMergeJoinOperatorDescriptor.java       | 186 +++++++++++++++
 .../joins/interval/IntervalMergeJoiner.java        | 264 +++++++++++++++++++++
 .../utils/AbstractIntervalInverseJoinUtil.java     |  52 ++++
 .../interval/utils/AbstractIntervalJoinUtil.java   | 115 +++++++++
 .../interval/utils/AfterIntervalJoinUtil.java      |  62 +++++
 .../utils/AfterIntervalJoinUtilFactory.java}       |  20 +-
 .../interval/utils/BeforeIntervalJoinUtil.java     |  62 +++++
 .../utils/BeforeIntervalJoinUtilFactory.java}      |  20 +-
 .../interval/utils/CoveredByIntervalJoinUtil.java  |  59 +++++
 .../utils/CoveredByIntervalJoinUtilFactory.java}   |  20 +-
 .../interval/utils/CoversIntervalJoinUtil.java}    |  34 +--
 .../utils/CoversIntervalJoinUtilFactory.java}      |  20 +-
 .../joins/interval/utils/IIntervalJoinUtil.java    | 102 ++++++++
 .../interval/utils/IIntervalJoinUtilFactory.java}  |  19 +-
 .../utils/OverlappedByIntervalJoinUtil.java}       |  34 +--
 .../OverlappedByIntervalJoinUtilFactory.java}      |  20 +-
 .../utils/OverlappingIntervalJoinUtil.java         |  88 +++++++
 .../utils/OverlappingIntervalJoinUtilFactory.java  |  71 ++++++
 .../interval/utils/OverlapsIntervalJoinUtil.java}  |  34 +--
 .../utils/OverlapsIntervalJoinUtilFactory.java}    |  20 +-
 .../utils/memory/AbstractTupleAccessor.java        | 194 +++++++++++++++
 .../interval/utils/memory/ITupleAccessor.java      |  69 ++++++
 .../interval/utils/memory/IntervalJoinUtil.java    |  82 +++++++
 .../interval/utils/memory/IntervalSideTuple.java   |  99 ++++++++
 ...ntervalVariableDeletableTupleMemoryManager.java | 112 +++++++++
 .../interval/utils/memory/RunFilePointer.java      |  96 ++++++++
 .../joins/interval/utils/memory/RunFileStream.java | 201 ++++++++++++++++
 .../joins/interval/utils/memory/TupleAccessor.java | 118 +++++++++
 .../core/algebra/base/PhysicalOperatorTag.java     |   3 +
 .../logical/visitors/UsedVariableVisitor.java      |  28 ++-
 ...or.java => AbstractRangeExchangePOperator.java} | 107 +++++----
 ...alBroadcastRangeFollowingExchangePOperator.java |  87 +++++++
 ...lBroadcastRangeIntersectExchangePOperator.java} | 115 ++++-----
 .../physical/RangePartitionExchangePOperator.java  |  74 +-----
 .../RangePartitionMergeExchangePOperator.java      | 154 ------------
 ...ava => AbstractOrderedPartitionedProperty.java} |  38 ++-
 .../algebra/properties/IPartitioningProperty.java  |  22 +-
 .../core/algebra/properties/IntervalColumn.java    |  78 ++++++
 .../properties/OrderedPartitionedProperty.java     |  77 +-----
 .../PartialBroadcastOrderedFollowingProperty.java  |  52 ++++
 ... PartialBroadcastOrderedIntersectProperty.java} |  78 +++---
 .../core/algebra/properties/PropertiesUtil.java    |  26 ++
 .../core/utils/LogicalOperatorDotVisitor.java      |   6 +
 .../rules/EnforceStructuralPropertiesRule.java     |  30 ++-
 .../VariableDeletableTupleMemoryManager.java       |   4 +-
 388 files changed, 4975 insertions(+), 1316 deletions(-)

diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/operators/physical/IntervalMergeJoinPOperator.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/operators/physical/IntervalMergeJoinPOperator.java
new file mode 100644
index 0000000..4815349
--- /dev/null
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/operators/physical/IntervalMergeJoinPOperator.java
@@ -0,0 +1,195 @@
+/*
+ * 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.
+ */
+package org.apache.asterix.algebra.operators.physical;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.asterix.optimizer.rules.util.IntervalPartitions;
+import org.apache.asterix.runtime.operators.joins.interval.IntervalMergeJoinOperatorDescriptor;
+import org.apache.asterix.runtime.operators.joins.interval.utils.IIntervalJoinUtilFactory;
+import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
+import org.apache.hyracks.algebricks.core.algebra.base.IHyracksJobBuilder;
+import org.apache.hyracks.algebricks.core.algebra.base.ILogicalOperator;
+import org.apache.hyracks.algebricks.core.algebra.base.IOptimizationContext;
+import org.apache.hyracks.algebricks.core.algebra.base.LogicalVariable;
+import org.apache.hyracks.algebricks.core.algebra.base.PhysicalOperatorTag;
+import org.apache.hyracks.algebricks.core.algebra.operators.logical.AbstractBinaryJoinOperator.JoinKind;
+import org.apache.hyracks.algebricks.core.algebra.operators.logical.AbstractLogicalOperator;
+import org.apache.hyracks.algebricks.core.algebra.operators.logical.IOperatorSchema;
+import org.apache.hyracks.algebricks.core.algebra.operators.physical.AbstractJoinPOperator;
+import org.apache.hyracks.algebricks.core.algebra.properties.ILocalStructuralProperty;
+import org.apache.hyracks.algebricks.core.algebra.properties.INodeDomain;
+import org.apache.hyracks.algebricks.core.algebra.properties.IPartitioningProperty;
+import org.apache.hyracks.algebricks.core.algebra.properties.IPartitioningRequirementsCoordinator;
+import org.apache.hyracks.algebricks.core.algebra.properties.IPhysicalPropertiesVector;
+import org.apache.hyracks.algebricks.core.algebra.properties.LocalOrderProperty;
+import org.apache.hyracks.algebricks.core.algebra.properties.OrderColumn;
+import org.apache.hyracks.algebricks.core.algebra.properties.OrderedPartitionedProperty;
+import org.apache.hyracks.algebricks.core.algebra.properties.PartialBroadcastOrderedFollowingProperty;
+import org.apache.hyracks.algebricks.core.algebra.properties.PartialBroadcastOrderedIntersectProperty;
+import org.apache.hyracks.algebricks.core.algebra.properties.PhysicalRequirements;
+import org.apache.hyracks.algebricks.core.algebra.properties.StructuralPropertiesVector;
+import org.apache.hyracks.algebricks.core.jobgen.impl.JobGenContext;
+import org.apache.hyracks.algebricks.core.jobgen.impl.JobGenHelper;
+import org.apache.hyracks.api.dataflow.IOperatorDescriptor;
+import org.apache.hyracks.api.dataflow.value.RecordDescriptor;
+import org.apache.hyracks.api.job.IOperatorDescriptorRegistry;
+import org.apache.hyracks.dataflow.common.data.partition.range.RangeMap;
+
+public class IntervalMergeJoinPOperator extends AbstractJoinPOperator {
+
+    private final List<LogicalVariable> keysLeftBranch;
+    private final List<LogicalVariable> keysRightBranch;
+    protected final IIntervalJoinUtilFactory mjcf;
+    protected final IntervalPartitions intervalPartitions;
+
+    private final int memSizeInFrames;
+
+    public IntervalMergeJoinPOperator(JoinKind kind, JoinPartitioningType partitioningType,
+            List<LogicalVariable> sideLeftOfEqualities, List<LogicalVariable> sideRightOfEqualities,
+            int memSizeInFrames, IIntervalJoinUtilFactory mjcf, IntervalPartitions intervalPartitions) {
+        super(kind, partitioningType);
+        this.keysLeftBranch = sideLeftOfEqualities;
+        this.keysRightBranch = sideRightOfEqualities;
+        this.mjcf = mjcf;
+        this.intervalPartitions = intervalPartitions;
+        this.memSizeInFrames = memSizeInFrames;
+    }
+
+    public IIntervalJoinUtilFactory getIntervalMergeJoinCheckerFactory() {
+        return mjcf;
+    }
+
+    @Override
+    public PhysicalOperatorTag getOperatorTag() {
+        return PhysicalOperatorTag.INTERVAL_MERGE_JOIN;
+    }
+
+    @Override
+    public String toString() {
+        return "INTERVAL_MERGE_JOIN" + " " + keysLeftBranch + " " + keysRightBranch;
+    }
+
+    @Override
+    public boolean isMicroOperator() {
+        return false;
+    }
+
+    @Override
+    public void computeDeliveredProperties(ILogicalOperator iop, IOptimizationContext context) {
+        List<OrderColumn> order = intervalPartitions.getLeftStartColumn();
+        IPartitioningProperty pp = new OrderedPartitionedProperty(order, null, intervalPartitions.getRangeMap());
+        List<ILocalStructuralProperty> propsLocal = new ArrayList<>();
+        propsLocal.add(new LocalOrderProperty(intervalPartitions.getLeftStartColumn()));
+        deliveredProperties = new StructuralPropertiesVector(pp, propsLocal);
+    }
+
+    @Override
+    public PhysicalRequirements getRequiredPropertiesForChildren(ILogicalOperator iop,
+            IPhysicalPropertiesVector reqdByParent, IOptimizationContext context) {
+        StructuralPropertiesVector[] pv = new StructuralPropertiesVector[2];
+        AbstractLogicalOperator op = (AbstractLogicalOperator) iop;
+
+        //Create Left Local Order Column
+        IPartitioningProperty ppLeft = null;
+        List<ILocalStructuralProperty> ispLeft = new ArrayList<>();
+        ArrayList<OrderColumn> leftLocalOrderColumn = new ArrayList<>();
+        for (LogicalVariable v : keysLeftBranch) {
+            leftLocalOrderColumn.add(new OrderColumn(v, intervalPartitions.getLeftIntervalColumn().get(0).getOrder()));
+        }
+        ispLeft.add(new LocalOrderProperty(leftLocalOrderColumn));
+
+        //Create Right Local Order Column
+        IPartitioningProperty ppRight = null;
+        List<ILocalStructuralProperty> ispRight = new ArrayList<>();
+        ArrayList<OrderColumn> rightLocalOrderColumn = new ArrayList<>();
+        for (LogicalVariable v : keysRightBranch) {
+            rightLocalOrderColumn
+                    .add(new OrderColumn(v, intervalPartitions.getRightIntervalColumn().get(0).getOrder()));
+        }
+        ispRight.add(new LocalOrderProperty(rightLocalOrderColumn));
+
+        if (op.getExecutionMode() == AbstractLogicalOperator.ExecutionMode.PARTITIONED) {
+            INodeDomain targetNodeDomain = context.getComputationNodeDomain();
+
+            RangeMap rangeMapHint = intervalPartitions.getRangeMap();
+
+            //Assign Property
+            switch (intervalPartitions.getLeftPartitioningType()) {
+                case ORDERED_PARTITIONED:
+                    ppLeft = new OrderedPartitionedProperty(intervalPartitions.getLeftStartColumn(), targetNodeDomain,
+                            rangeMapHint);
+                    break;
+                case PARTIAL_BROADCAST_ORDERED_FOLLOWING:
+                    ppLeft = new PartialBroadcastOrderedFollowingProperty(intervalPartitions.getLeftStartColumn(),
+                            targetNodeDomain, rangeMapHint);
+                    break;
+                case PARTIAL_BROADCAST_ORDERED_INTERSECT:
+                    ppLeft = new PartialBroadcastOrderedIntersectProperty(intervalPartitions.getLeftIntervalColumn(),
+                            targetNodeDomain, rangeMapHint);
+                    break;
+            }
+            switch (intervalPartitions.getRightPartitioningType()) {
+                case ORDERED_PARTITIONED:
+                    ppRight = new OrderedPartitionedProperty(intervalPartitions.getRightStartColumn(), targetNodeDomain,
+                            rangeMapHint);
+                    break;
+                case PARTIAL_BROADCAST_ORDERED_FOLLOWING:
+                    ppRight = new PartialBroadcastOrderedFollowingProperty(intervalPartitions.getRightStartColumn(),
+                            targetNodeDomain, rangeMapHint);
+                    break;
+                case PARTIAL_BROADCAST_ORDERED_INTERSECT:
+                    ppRight = new PartialBroadcastOrderedIntersectProperty(intervalPartitions.getRightIntervalColumn(),
+                            targetNodeDomain, rangeMapHint);
+                    break;
+            }
+        }
+        pv[0] = new StructuralPropertiesVector(ppLeft, ispLeft);
+        pv[1] = new StructuralPropertiesVector(ppRight, ispRight);
+        IPartitioningRequirementsCoordinator prc = IPartitioningRequirementsCoordinator.NO_COORDINATION;
+        return new PhysicalRequirements(pv, prc);
+    }
+
+    @Override
+    public void contributeRuntimeOperator(IHyracksJobBuilder builder, JobGenContext context, ILogicalOperator op,
+            IOperatorSchema opSchema, IOperatorSchema[] inputSchemas, IOperatorSchema outerPlanSchema)
+            throws AlgebricksException {
+        int[] keysLeft = JobGenHelper.variablesToFieldIndexes(keysLeftBranch, inputSchemas[0]);
+        int[] keysRight = JobGenHelper.variablesToFieldIndexes(keysRightBranch, inputSchemas[1]);
+
+        IOperatorDescriptorRegistry spec = builder.getJobSpec();
+        RecordDescriptor recordDescriptor =
+                JobGenHelper.mkRecordDescriptor(context.getTypeEnvironment(op), opSchema, context);
+
+        IOperatorDescriptor opDesc = getIntervalOperatorDescriptor(keysLeft, keysRight, spec, recordDescriptor, mjcf);
+        contributeOpDesc(builder, (AbstractLogicalOperator) op, opDesc);
+
+        ILogicalOperator src1 = op.getInputs().get(0).getValue();
+        builder.contributeGraphEdge(src1, 0, op, 0);
+        ILogicalOperator src2 = op.getInputs().get(1).getValue();
+        builder.contributeGraphEdge(src2, 0, op, 1);
+    }
+
+    IOperatorDescriptor getIntervalOperatorDescriptor(int[] keysLeft, int[] keysRight, IOperatorDescriptorRegistry spec,
+            RecordDescriptor recordDescriptor, IIntervalJoinUtilFactory mjcf) {
+        return new IntervalMergeJoinOperatorDescriptor(spec, memSizeInFrames, keysLeft, keysRight, recordDescriptor,
+                mjcf);
+    }
+}
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 31de7ee..e662737 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
@@ -34,6 +34,7 @@ import org.apache.asterix.om.functions.BuiltinFunctions;
 import org.apache.asterix.optimizer.base.AnalysisUtil;
 import org.apache.asterix.optimizer.rules.am.AccessMethodJobGenParams;
 import org.apache.asterix.optimizer.rules.am.BTreeJobGenParams;
+import org.apache.asterix.optimizer.rules.util.AsterixJoinUtils;
 import org.apache.commons.lang3.mutable.Mutable;
 import org.apache.commons.lang3.mutable.MutableObject;
 import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
@@ -53,6 +54,8 @@ import org.apache.hyracks.algebricks.core.algebra.operators.logical.AbstractLogi
 import org.apache.hyracks.algebricks.core.algebra.operators.logical.AbstractUnnestMapOperator;
 import org.apache.hyracks.algebricks.core.algebra.operators.logical.AggregateOperator;
 import org.apache.hyracks.algebricks.core.algebra.operators.logical.GroupByOperator;
+import org.apache.hyracks.algebricks.core.algebra.operators.logical.InnerJoinOperator;
+import org.apache.hyracks.algebricks.core.algebra.operators.logical.LeftOuterJoinOperator;
 import org.apache.hyracks.algebricks.core.algebra.operators.logical.LeftOuterUnnestMapOperator;
 import org.apache.hyracks.algebricks.core.algebra.operators.logical.UnnestMapOperator;
 import org.apache.hyracks.algebricks.core.algebra.operators.logical.WindowOperator;
@@ -79,6 +82,26 @@ public final class SetAsterixPhysicalOperatorsRule extends SetAlgebricksPhysical
         }
 
         @Override
+        public IPhysicalOperator visitInnerJoinOperator(InnerJoinOperator op, Boolean topLevelOp)
+                throws AlgebricksException {
+            AsterixJoinUtils.setJoinAlgorithmAndExchangeAlgo(op, topLevelOp, context);
+            if (op.getPhysicalOperator() != null) {
+                return op.getPhysicalOperator();
+            }
+            return super.visitInnerJoinOperator(op, topLevelOp);
+        }
+
+        @Override
+        public IPhysicalOperator visitLeftOuterJoinOperator(LeftOuterJoinOperator op, Boolean topLevelOp)
+                throws AlgebricksException {
+            AsterixJoinUtils.setJoinAlgorithmAndExchangeAlgo(op, topLevelOp, context);
+            if (op.getPhysicalOperator() != null) {
+                return op.getPhysicalOperator();
+            }
+            return super.visitLeftOuterJoinOperator(op, topLevelOp);
+        }
+
+        @Override
         public ExternalGroupByPOperator createExternalGroupByPOperator(GroupByOperator gby) throws AlgebricksException {
             Mutable<ILogicalOperator> r0 = gby.getNestedPlans().get(0).getRoots().get(0);
             if (!r0.getValue().getOperatorTag().equals(LogicalOperatorTag.AGGREGATE)) {
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/util/AsterixJoinUtils.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/util/AsterixJoinUtils.java
new file mode 100644
index 0000000..45b8b07
--- /dev/null
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/util/AsterixJoinUtils.java
@@ -0,0 +1,83 @@
+/*
+ * 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.
+ */
+package org.apache.asterix.optimizer.rules.util;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.asterix.common.annotations.RangeAnnotation;
+import org.apache.asterix.om.types.ATypeTag;
+import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
+import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression;
+import org.apache.hyracks.algebricks.core.algebra.base.IOptimizationContext;
+import org.apache.hyracks.algebricks.core.algebra.base.LogicalExpressionTag;
+import org.apache.hyracks.algebricks.core.algebra.base.LogicalVariable;
+import org.apache.hyracks.algebricks.core.algebra.expressions.AbstractFunctionCallExpression;
+import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
+import org.apache.hyracks.algebricks.core.algebra.operators.logical.AbstractBinaryJoinOperator;
+import org.apache.hyracks.api.exceptions.ErrorCode;
+import org.apache.hyracks.api.exceptions.IWarningCollector;
+import org.apache.hyracks.api.exceptions.Warning;
+import org.apache.hyracks.dataflow.common.data.partition.range.RangeMap;
+
+public class AsterixJoinUtils {
+
+    private static final int LEFT = 0;
+    private static final int RIGHT = 1;
+
+    private AsterixJoinUtils() {
+    }
+
+    public static void setJoinAlgorithmAndExchangeAlgo(AbstractBinaryJoinOperator op, Boolean topLevelOp,
+            IOptimizationContext context) throws AlgebricksException {
+        if (!topLevelOp) {
+            return;
+        }
+        ILogicalExpression conditionLE = op.getCondition().getValue();
+        if (conditionLE.getExpressionTag() != LogicalExpressionTag.FUNCTION_CALL) {
+            return;
+        }
+        List<LogicalVariable> sideLeft = new ArrayList<>(1);
+        List<LogicalVariable> sideRight = new ArrayList<>(1);
+        List<LogicalVariable> varsLeft = op.getInputs().get(LEFT).getValue().getSchema();
+        List<LogicalVariable> varsRight = op.getInputs().get(RIGHT).getValue().getSchema();
+        AbstractFunctionCallExpression fexp = (AbstractFunctionCallExpression) conditionLE;
+        FunctionIdentifier fi =
+                IntervalJoinUtils.isIntervalJoinCondition(fexp, varsLeft, varsRight, sideLeft, sideRight, LEFT, RIGHT);
+        if (fi == null) {
+            return;
+        }
+        RangeAnnotation rangeAnnotation = IntervalJoinUtils.findRangeAnnotation(fexp);
+        if (rangeAnnotation == null) {
+            return;
+        }
+        //Check RangeMap type
+        RangeMap rangeMap = (RangeMap) rangeAnnotation.getObject();
+        if (rangeMap.getTag(0, 0) != ATypeTag.DATETIME.serialize() && rangeMap.getTag(0, 0) != ATypeTag.DATE.serialize()
+                && rangeMap.getTag(0, 0) != ATypeTag.TIME.serialize()) {
+            IWarningCollector warningCollector = context.getWarningCollector();
+            warningCollector.warn(Warning.forHyracks(op.getSourceLocation(), ErrorCode.INAPPLICABLE_HINT,
+                    "Date, DateTime, and Time are only range hints types supported for interval joins"));
+            return;
+        }
+        IntervalPartitions intervalPartitions =
+                IntervalJoinUtils.createIntervalPartitions(op, fi, sideLeft, sideRight, rangeMap, context, LEFT, RIGHT);
+        IntervalJoinUtils.setSortMergeIntervalJoinOp(op, fi, sideLeft, sideRight, context, intervalPartitions);
+    }
+}
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/util/IntervalJoinUtils.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/util/IntervalJoinUtils.java
new file mode 100644
index 0000000..d887914
--- /dev/null
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/util/IntervalJoinUtils.java
@@ -0,0 +1,251 @@
+/*
+ * 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.
+ */
+
+package org.apache.asterix.optimizer.rules.util;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.asterix.algebra.operators.physical.IntervalMergeJoinPOperator;
+import org.apache.asterix.common.annotations.RangeAnnotation;
+import org.apache.asterix.common.exceptions.CompilationException;
+import org.apache.asterix.common.exceptions.ErrorCode;
+import org.apache.asterix.lang.common.util.FunctionUtil;
+import org.apache.asterix.om.functions.BuiltinFunctions;
+import org.apache.asterix.runtime.operators.joins.interval.utils.AfterIntervalJoinUtilFactory;
+import org.apache.asterix.runtime.operators.joins.interval.utils.BeforeIntervalJoinUtilFactory;
+import org.apache.asterix.runtime.operators.joins.interval.utils.CoveredByIntervalJoinUtilFactory;
+import org.apache.asterix.runtime.operators.joins.interval.utils.CoversIntervalJoinUtilFactory;
+import org.apache.asterix.runtime.operators.joins.interval.utils.IIntervalJoinUtilFactory;
+import org.apache.asterix.runtime.operators.joins.interval.utils.OverlappedByIntervalJoinUtilFactory;
+import org.apache.asterix.runtime.operators.joins.interval.utils.OverlappingIntervalJoinUtilFactory;
+import org.apache.asterix.runtime.operators.joins.interval.utils.OverlapsIntervalJoinUtilFactory;
+import org.apache.commons.lang3.mutable.Mutable;
+import org.apache.commons.lang3.mutable.MutableObject;
+import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
+import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression;
+import org.apache.hyracks.algebricks.core.algebra.base.ILogicalOperator;
+import org.apache.hyracks.algebricks.core.algebra.base.IOptimizationContext;
+import org.apache.hyracks.algebricks.core.algebra.base.LogicalExpressionTag;
+import org.apache.hyracks.algebricks.core.algebra.base.LogicalVariable;
+import org.apache.hyracks.algebricks.core.algebra.expressions.AbstractFunctionCallExpression;
+import org.apache.hyracks.algebricks.core.algebra.expressions.IExpressionAnnotation;
+import org.apache.hyracks.algebricks.core.algebra.expressions.ScalarFunctionCallExpression;
+import org.apache.hyracks.algebricks.core.algebra.expressions.VariableReferenceExpression;
+import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
+import org.apache.hyracks.algebricks.core.algebra.functions.IFunctionInfo;
+import org.apache.hyracks.algebricks.core.algebra.operators.logical.AbstractBinaryJoinOperator;
+import org.apache.hyracks.algebricks.core.algebra.operators.logical.AssignOperator;
+import org.apache.hyracks.algebricks.core.algebra.operators.logical.OrderOperator;
+import org.apache.hyracks.algebricks.core.algebra.operators.physical.AbstractJoinPOperator;
+import org.apache.hyracks.algebricks.core.algebra.operators.physical.AssignPOperator;
+import org.apache.hyracks.algebricks.core.algebra.properties.IPartitioningProperty.PartitioningType;
+import org.apache.hyracks.algebricks.core.algebra.properties.IntervalColumn;
+import org.apache.hyracks.dataflow.common.data.partition.range.RangeMap;
+
+public class IntervalJoinUtils {
+
+    private static final Map<FunctionIdentifier, FunctionIdentifier> INTERVAL_JOIN_CONDITIONS = new HashMap<>();
+
+    static {
+        INTERVAL_JOIN_CONDITIONS.put(BuiltinFunctions.INTERVAL_AFTER, BuiltinFunctions.INTERVAL_BEFORE);
+        INTERVAL_JOIN_CONDITIONS.put(BuiltinFunctions.INTERVAL_BEFORE, BuiltinFunctions.INTERVAL_AFTER);
+        INTERVAL_JOIN_CONDITIONS.put(BuiltinFunctions.INTERVAL_COVERED_BY, BuiltinFunctions.INTERVAL_COVERS);
+        INTERVAL_JOIN_CONDITIONS.put(BuiltinFunctions.INTERVAL_COVERS, BuiltinFunctions.INTERVAL_COVERED_BY);
+        INTERVAL_JOIN_CONDITIONS.put(BuiltinFunctions.INTERVAL_OVERLAPPED_BY, BuiltinFunctions.INTERVAL_OVERLAPS);
+        INTERVAL_JOIN_CONDITIONS.put(BuiltinFunctions.INTERVAL_OVERLAPPING, BuiltinFunctions.INTERVAL_OVERLAPPING);
+        INTERVAL_JOIN_CONDITIONS.put(BuiltinFunctions.INTERVAL_OVERLAPS, BuiltinFunctions.INTERVAL_OVERLAPPED_BY);
+    }
+
+    protected static RangeAnnotation findRangeAnnotation(AbstractFunctionCallExpression fexp) {
+        Iterator<IExpressionAnnotation> annotationIter = fexp.getAnnotations().values().iterator();
+        while (annotationIter.hasNext()) {
+            IExpressionAnnotation annotation = annotationIter.next();
+            if (annotation instanceof RangeAnnotation) {
+                return (RangeAnnotation) annotation;
+            }
+        }
+        return null;
+    }
+
+    protected static void setSortMergeIntervalJoinOp(AbstractBinaryJoinOperator op, FunctionIdentifier fi,
+            List<LogicalVariable> sideLeft, List<LogicalVariable> sideRight, IOptimizationContext context,
+            IntervalPartitions intervalPartitions) throws CompilationException {
+        IIntervalJoinUtilFactory mjcf = createIntervalJoinCheckerFactory(fi, intervalPartitions.getRangeMap());
+        op.setPhysicalOperator(new IntervalMergeJoinPOperator(op.getJoinKind(),
+                AbstractJoinPOperator.JoinPartitioningType.BROADCAST, sideLeft, sideRight,
+                context.getPhysicalOptimizationConfig().getMaxFramesForJoin(), mjcf, intervalPartitions));
+    }
+
+    /**
+     * Certain Relations not yet supported as seen below. Will default to regular join.
+     * Inserts partition sort key.
+     */
+    protected static IntervalPartitions createIntervalPartitions(AbstractBinaryJoinOperator op, FunctionIdentifier fi,
+            List<LogicalVariable> sideLeft, List<LogicalVariable> sideRight, RangeMap rangeMap,
+            IOptimizationContext context, int left, int right) throws AlgebricksException {
+
+        List<LogicalVariable> leftPartitionVar = new ArrayList<>(2);
+        leftPartitionVar.add(context.newVar());
+        leftPartitionVar.add(context.newVar());
+        List<LogicalVariable> rightPartitionVar = new ArrayList<>(2);
+        rightPartitionVar.add(context.newVar());
+        rightPartitionVar.add(context.newVar());
+
+        insertPartitionSortKey(op, left, leftPartitionVar, sideLeft.get(0), context);
+        insertPartitionSortKey(op, right, rightPartitionVar, sideRight.get(0), context);
+
+        List<IntervalColumn> leftIC = Collections.singletonList(new IntervalColumn(leftPartitionVar.get(0),
+                leftPartitionVar.get(1), OrderOperator.IOrder.OrderKind.ASC));
+        List<IntervalColumn> rightIC = Collections.singletonList(new IntervalColumn(rightPartitionVar.get(0),
+                rightPartitionVar.get(1), OrderOperator.IOrder.OrderKind.ASC));
+
+        //Set Partitioning Types
+        PartitioningType leftPartitioningType = PartitioningType.ORDERED_PARTITIONED;
+        PartitioningType rightPartitioningType = PartitioningType.ORDERED_PARTITIONED;
+        if (fi.equals(BuiltinFunctions.INTERVAL_OVERLAPPED_BY)) {
+            rightPartitioningType = PartitioningType.PARTIAL_BROADCAST_ORDERED_INTERSECT;
+        } else if (fi.equals(BuiltinFunctions.INTERVAL_OVERLAPS)) {
+            leftPartitioningType = PartitioningType.PARTIAL_BROADCAST_ORDERED_INTERSECT;
+        } else if (fi.equals(BuiltinFunctions.INTERVAL_OVERLAPPING)) {
+            leftPartitioningType = PartitioningType.PARTIAL_BROADCAST_ORDERED_INTERSECT;
+            rightPartitioningType = PartitioningType.PARTIAL_BROADCAST_ORDERED_INTERSECT;
+        } else if (fi.equals(BuiltinFunctions.INTERVAL_COVERS)) {
+            leftPartitioningType = PartitioningType.PARTIAL_BROADCAST_ORDERED_INTERSECT;
+        } else if (fi.equals(BuiltinFunctions.INTERVAL_COVERED_BY)) {
+            rightPartitioningType = PartitioningType.PARTIAL_BROADCAST_ORDERED_INTERSECT;
+        } else if (fi.equals(BuiltinFunctions.INTERVAL_BEFORE)) {
+            leftPartitioningType = PartitioningType.PARTIAL_BROADCAST_ORDERED_FOLLOWING;
+        } else if (fi.equals(BuiltinFunctions.INTERVAL_AFTER)) {
+            rightPartitioningType = PartitioningType.PARTIAL_BROADCAST_ORDERED_FOLLOWING;
+        } else {
+            throw new CompilationException(ErrorCode.COMPILATION_ILLEGAL_STATE, fi.getName());
+        }
+        return new IntervalPartitions(rangeMap, leftIC, rightIC, leftPartitioningType, rightPartitioningType);
+    }
+
+    protected static FunctionIdentifier isIntervalJoinCondition(ILogicalExpression e,
+            Collection<LogicalVariable> inLeftAll, Collection<LogicalVariable> inRightAll,
+            Collection<LogicalVariable> outLeftFields, Collection<LogicalVariable> outRightFields, int left,
+            int right) {
+        FunctionIdentifier fiReturn;
+        boolean switchArguments = false;
+        if (e.getExpressionTag() != LogicalExpressionTag.FUNCTION_CALL) {
+            return null;
+        }
+        AbstractFunctionCallExpression fexp = (AbstractFunctionCallExpression) e;
+        FunctionIdentifier fi = fexp.getFunctionIdentifier();
+        if (isIntervalFunction(fi)) {
+            fiReturn = fi;
+        } else {
+            return null;
+        }
+        ILogicalExpression opLeft = fexp.getArguments().get(left).getValue();
+        ILogicalExpression opRight = fexp.getArguments().get(right).getValue();
+        if (opLeft.getExpressionTag() != LogicalExpressionTag.VARIABLE
+                || opRight.getExpressionTag() != LogicalExpressionTag.VARIABLE) {
+            return null;
+        }
+        LogicalVariable var1 = ((VariableReferenceExpression) opLeft).getVariableReference();
+        if (inLeftAll.contains(var1) && !outLeftFields.contains(var1)) {
+            outLeftFields.add(var1);
+        } else if (inRightAll.contains(var1) && !outRightFields.contains(var1)) {
+            outRightFields.add(var1);
+            fiReturn = getInverseIntervalFunction(fi);
+            switchArguments = true;
+        } else {
+            return null;
+        }
+        LogicalVariable var2 = ((VariableReferenceExpression) opRight).getVariableReference();
+        if (inLeftAll.contains(var2) && !outLeftFields.contains(var2) && switchArguments) {
+            outLeftFields.add(var2);
+        } else if (inRightAll.contains(var2) && !outRightFields.contains(var2) && !switchArguments) {
+            outRightFields.add(var2);
+        } else {
+            return null;
+        }
+        return fiReturn;
+    }
+
+    /**
+     * Certain Relations not yet supported as seen below. Will default to regular join.
+     */
+    private static IIntervalJoinUtilFactory createIntervalJoinCheckerFactory(FunctionIdentifier fi, RangeMap rangeMap)
+            throws CompilationException {
+        IIntervalJoinUtilFactory mjcf;
+        if (fi.equals(BuiltinFunctions.INTERVAL_OVERLAPPED_BY)) {
+            mjcf = new OverlappedByIntervalJoinUtilFactory();
+        } else if (fi.equals(BuiltinFunctions.INTERVAL_OVERLAPS)) {
+            mjcf = new OverlapsIntervalJoinUtilFactory();
+        } else if (fi.equals(BuiltinFunctions.INTERVAL_COVERS)) {
+            mjcf = new CoversIntervalJoinUtilFactory();
+        } else if (fi.equals(BuiltinFunctions.INTERVAL_COVERED_BY)) {
+            mjcf = new CoveredByIntervalJoinUtilFactory();
+        } else if (fi.equals(BuiltinFunctions.INTERVAL_BEFORE)) {
+            mjcf = new BeforeIntervalJoinUtilFactory();
+        } else if (fi.equals(BuiltinFunctions.INTERVAL_AFTER)) {
+            mjcf = new AfterIntervalJoinUtilFactory();
+        } else if (fi.equals(BuiltinFunctions.INTERVAL_OVERLAPPING)) {
+            mjcf = new OverlappingIntervalJoinUtilFactory(rangeMap);
+        } else {
+            throw new CompilationException(ErrorCode.COMPILATION_ILLEGAL_STATE, fi.getName());
+        }
+        return mjcf;
+    }
+
+    private static boolean isIntervalFunction(FunctionIdentifier fi) {
+        return INTERVAL_JOIN_CONDITIONS.containsKey(fi);
+    }
+
+    private static FunctionIdentifier getInverseIntervalFunction(FunctionIdentifier fi) {
+        return INTERVAL_JOIN_CONDITIONS.get(fi);
+    }
+
+    private static void insertPartitionSortKey(AbstractBinaryJoinOperator op, int branch,
+            List<LogicalVariable> partitionVars, LogicalVariable intervalVar, IOptimizationContext context)
+            throws AlgebricksException {
+        Mutable<ILogicalExpression> intervalExp = new MutableObject<>(new VariableReferenceExpression(intervalVar));
+
+        List<Mutable<ILogicalExpression>> assignExps = new ArrayList<>();
+        // Start partition
+        IFunctionInfo startFi = FunctionUtil.getFunctionInfo(BuiltinFunctions.ACCESSOR_TEMPORAL_INTERVAL_START);
+        ScalarFunctionCallExpression startPartitionExp = new ScalarFunctionCallExpression(startFi, intervalExp);
+        assignExps.add(new MutableObject<>(startPartitionExp));
+        // End partition
+        IFunctionInfo endFi = FunctionUtil.getFunctionInfo(BuiltinFunctions.ACCESSOR_TEMPORAL_INTERVAL_END);
+        ScalarFunctionCallExpression endPartitionExp = new ScalarFunctionCallExpression(endFi, intervalExp);
+        assignExps.add(new MutableObject<>(endPartitionExp));
+
+        AssignOperator ao = new AssignOperator(partitionVars, assignExps);
+        ao.setSourceLocation(op.getSourceLocation());
+        ao.setExecutionMode(op.getExecutionMode());
+        AssignPOperator apo = new AssignPOperator();
+        ao.setPhysicalOperator(apo);
+        Mutable<ILogicalOperator> aoRef = new MutableObject<>(ao);
+        ao.getInputs().add(op.getInputs().get(branch));
+        op.getInputs().set(branch, aoRef);
+
+        context.computeAndSetTypeEnvironmentForOperator(ao);
+    }
+}
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/util/IntervalPartitions.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/util/IntervalPartitions.java
new file mode 100644
index 0000000..bc78017
--- /dev/null
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/util/IntervalPartitions.java
@@ -0,0 +1,82 @@
+/*
+ * 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.
+ */
+
+package org.apache.asterix.optimizer.rules.util;
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.hyracks.algebricks.core.algebra.base.LogicalVariable;
+import org.apache.hyracks.algebricks.core.algebra.properties.IPartitioningProperty.PartitioningType;
+import org.apache.hyracks.algebricks.core.algebra.properties.IntervalColumn;
+import org.apache.hyracks.algebricks.core.algebra.properties.OrderColumn;
+import org.apache.hyracks.dataflow.common.data.partition.range.RangeMap;
+
+public class IntervalPartitions {
+
+    private final RangeMap rangeMap;
+    private final List<IntervalColumn> leftIntervalColumn;
+    private final List<IntervalColumn> rightIntervalColumn;
+    private final PartitioningType leftPartitioningType;
+    private final PartitioningType rightPartitioningType;
+
+    IntervalPartitions(RangeMap rangeMap, List<IntervalColumn> leftIntervalColumn,
+            List<IntervalColumn> rightIntervalColumn, PartitioningType leftPartitioningType,
+            PartitioningType rightPartitioningType) {
+        this.rangeMap = rangeMap;
+        this.leftIntervalColumn = leftIntervalColumn;
+        this.rightIntervalColumn = rightIntervalColumn;
+        this.leftPartitioningType = leftPartitioningType;
+        this.rightPartitioningType = rightPartitioningType;
+    }
+
+    public RangeMap getRangeMap() {
+        return rangeMap;
+    }
+
+    public PartitioningType getLeftPartitioningType() {
+        return leftPartitioningType;
+    }
+
+    public PartitioningType getRightPartitioningType() {
+        return rightPartitioningType;
+    }
+
+    public List<IntervalColumn> getLeftIntervalColumn() {
+        return leftIntervalColumn;
+    }
+
+    public List<IntervalColumn> getRightIntervalColumn() {
+        return rightIntervalColumn;
+    }
+
+    public List<OrderColumn> getLeftStartColumn() {
+        LogicalVariable leftStartLogicalVariable = leftIntervalColumn.get(0).getStartColumn();
+        List<OrderColumn> leftOrderColumn =
+                Arrays.asList(new OrderColumn(leftStartLogicalVariable, leftIntervalColumn.get(0).getOrder()));
+        return leftOrderColumn;
+    }
+
+    public List<OrderColumn> getRightStartColumn() {
+        LogicalVariable rightStartLogicalVariable = rightIntervalColumn.get(0).getStartColumn();
+        List<OrderColumn> rightOrderColumn =
+                Arrays.asList(new OrderColumn(rightStartLogicalVariable, rightIntervalColumn.get(0).getOrder()));
+        return rightOrderColumn;
+    }
+}
diff --git a/asterixdb/asterix-app/data/tinycollege/staff.adm b/asterixdb/asterix-app/data/tinycollege/staff.adm
index 4bfdd4b..d24bd87 100644
--- a/asterixdb/asterix-app/data/tinycollege/staff.adm
+++ b/asterixdb/asterix-app/data/tinycollege/staff.adm
@@ -1,7 +1,8 @@
-{ "id": 14, "name": "Alex", "office": "A", "employment": interval(date("2003-01-01"), date("2008-01-01")) }
-{ "id": 13, "name": "Elisabeth", "office": "B", "employment": interval(date("2002-01-01"), date("2010-01-01")) }
-{ "id": 16, "name": "Franklin", "office": "A", "employment": interval(date("2004-01-01"), date("2009-01-01")) }
-{ "id": 15, "name": "Henry", "office": "C", "employment": interval(date("2003-01-01"), date("2008-01-01")) }
-{ "id": 17, "name": "Maryann", "office": "B", "employment": interval(date("2006-01-01"), date("2010-01-01")) }
-{ "id": 11, "name": "Vicky", "office": "D", "employment": interval(date("2001-01-01"), date("2010-01-01")) }
-{ "id": 12, "name": "Zack", "office": "A", "employment": interval(date("2002-01-01"), date("2003-01-01")) }
+{ "id": 14, "name": "Alex", "office": "A", "employment": interval(date("2003-01-01"), date("2008-01-01")), "vacation": interval(datetime("2003-01-01T00:00:00.0"), datetime("2008-01-01T00:00:00.0")), "office_hours": interval(time("03:00:00.0+00:00"), time("08:00:00.0+00:00"))}
+{ "id": 13, "name": "Elisabeth", "office": "B", "employment": interval(date("2002-01-01"), date("2010-01-01")), "vacation": interval(datetime("2002-01-01T00:00:00.0"), datetime("2010-01-01T00:00:00.0")), "office_hours": interval(time("02:00:00.0+00:00"), time("10:00:00.0+00:00"))}
+{ "id": 16, "name": "Franklin", "office": "A", "employment": interval(date("2004-01-01"), date("2009-01-01")), "vacation": interval(datetime("2004-01-01T00:00:00.0"), datetime("2009-01-01T00:00:00.0")), "office_hours": interval(time("04:00:00.0+00:00"), time("09:00:00.0+00:00"))}
+{ "id": 15, "name": "Henry", "office": "C", "employment": interval(date("2003-01-01"), date("2008-01-01")), "vacation": interval(datetime("2003-01-01T00:00:00.0"), datetime("2008-01-01T00:00:00.0")), "office_hours": interval(time("03:00:00.0+00:00"), time("08:00:00.0+00:00"))}
+{ "id": 17, "name": "MaryAnn", "office": "B", "employment": interval(date("2006-01-01"), date("2010-01-01")), "vacation": interval(datetime("2006-01-01T00:00:00.0"), datetime("2010-01-01T00:00:00.0")), "office_hours": interval(time("06:00:00.0+00:00"), time("10:00:00.0+00:00"))}
+{ "id": 11, "name": "Vicky", "office": "D", "employment": interval(date("2001-01-01"), date("2010-01-01")), "vacation": interval(datetime("2001-01-01T00:00:00.0"), datetime("2010-01-01T00:00:00.0")), "office_hours": interval(time("01:00:00.0+00:00"), time("10:00:00.0+00:00"))}
+{ "id": 12, "name": "Zack", "office": "A", "employment": interval(date("2002-01-01"), date("2003-01-01")), "vacation": interval(datetime("2002-01-01T00:00:00.0"), datetime("2003-01-01T00:00:00.0")), "office_hours": interval(time("02:00:00.0+00:00"), time("03:00:00.0+00:00"))}
+{ "id": 18, "name": "Jake", "office": "C", "employment": interval(date("2006-01-01"), date("2008-01-01")), "vacation": interval(datetime("2006-01-01T00:00:00.0"), datetime("2008-01-01T00:00:00.0")), "office_hours": interval(time("06:00:00.0+00:00"), time("08:00:00.0+00:00"))}
\ No newline at end of file
diff --git a/asterixdb/asterix-app/data/tinycollege/students.adm b/asterixdb/asterix-app/data/tinycollege/students.adm
index b869075..d9447d2 100644
--- a/asterixdb/asterix-app/data/tinycollege/students.adm
+++ b/asterixdb/asterix-app/data/tinycollege/students.adm
@@ -1,7 +1,7 @@
-{ "id": 22, "name": "Charles", "office": "X", "attendance": interval(date("2001-01-01"), date("2004-01-01")) }
-{ "id": 23, "name": "Frank", "office": "Y", "attendance": interval(date("2001-01-01"), date("2004-01-01")) }
-{ "id": 25, "name": "Karen", "office": "Y", "attendance": interval(date("2007-01-01"), date("2009-01-01")) }
-{ "id": 24, "name": "Mary", "office": "Y", "attendance": interval(date("2002-01-01"), date("2005-01-01")) }
-{ "id": 21, "name": "Olga", "office": "Z", "attendance": interval(date("2001-01-01"), date("2003-01-01")) }
-{ "id": 26, "name": "Steve", "office": "Z", "attendance": interval(date("2007-01-01"), date("2010-01-01")) }
-{ "id": 27, "name": "Tess", "office": "X", "attendance": interval(date("2008-01-01"), date("2010-01-01")) }
+{ "id": 22, "name": "Charles", "office": "X", "attendance": interval(date("2001-01-01"), date("2004-01-01")), "break": interval(datetime("2001-01-01T00:00:00.0"), datetime("2004-01-01T00:00:00.0")), "work_hours": interval(time("01:00:00.0+00:00"), time("04:00:00.0+00:00"))}
+{ "id": 23, "name": "Frank", "office": "Y", "attendance": interval(date("2001-01-01"), date("2004-01-01")), "break": interval(datetime("2001-01-01T00:00:00.0"), datetime("2004-01-01T00:00:00.0")), "work_hours": interval(time("01:00:00.0+00:00"), time("04:00:00.0+00:00"))}
+{ "id": 25, "name": "Karen", "office": "Y", "attendance": interval(date("2007-01-01"), date("2009-01-01")), "break": interval(datetime("2007-01-01T00:00:00.0"), datetime("2009-01-01T00:00:00.0")), "work_hours": interval(time("07:00:00.0+00:00"), time("09:00:00.0+00:00"))}
+{ "id": 24, "name": "Mary", "office": "Y", "attendance": interval(date("2002-01-01"), date("2005-01-01")), "break": interval(datetime("2002-01-01T00:00:00.0"), datetime("2005-01-01T00:00:00.0")), "work_hours": interval(time("02:00:00.0+00:00"), time("05:00:00.0+00:00"))}
+{ "id": 21, "name": "Olga", "office": "Z", "attendance": interval(date("2001-01-01"), date("2003-01-01")), "break": interval(datetime("2001-01-01T00:00:00.0"), datetime("2003-01-01T00:00:00.0")), "work_hours": interval(time("01:00:00.0+00:00"), time("03:00:00.0+00:00"))}
+{ "id": 26, "name": "Steve", "office": "Z", "attendance": interval(date("2007-01-01"), date("2010-01-01")), "break": interval(datetime("2007-01-01T00:00:00.0"), datetime("2010-01-01T00:00:00.0")), "work_hours": interval(time("07:00:00.0+00:00"), time("10:00:00.0+00:00"))}
+{ "id": 27, "name": "Tess", "office": "X", "attendance": interval(date("2008-01-01"), date("2010-01-01")), "break": interval(datetime("2008-01-01T00:00:00.0"), datetime("2010-01-01T00:00:00.0")), "work_hours": interval(time("08:00:00.0+00:00"), time("10:00:00.0+00:00"))}
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp
index a33e6dd..bd35c4b 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp
@@ -17,9 +17,9 @@
  * under the License.
  */
 /*
- * Description      :   Check temporal join functionality for interval
+ * Description      :   Check temporal join functionality for interval after
  * Expected Result  :   Success
- * Date             :   21th Oct, 2019
+ * Date             :   10th Aug, 2019
  */
 
 drop dataverse TinyCollege if exists;
@@ -43,6 +43,8 @@ create type StudentType as open {
 create dataset Students(StudentType)
 primary key name;
 
-select element { "staff": f.employment, "student" : d.attendance }
+select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-after`(f.employment, d.attendance);
\ No newline at end of file
+where
+/*+ range [date("2003-06-30"), date("2005-12-31"), date("2008-06-30")] */
+interval_after(f.employment, d.attendance);
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp
index e8ebb86..acea862 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp
@@ -17,9 +17,9 @@
  * under the License.
  */
 /*
- * Description      :   Check temporal join functionality for interval
+ * Description      :   Check temporal join functionality for interval before
  * Expected Result  :   Success
- * Date             :   21th Oct, 2019
+ * Date             :   10th Aug, 2019
  */
 
 drop dataverse TinyCollege if exists;
@@ -45,4 +45,6 @@ primary key name;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-before`(f.employment, d.attendance);
\ No newline at end of file
+where
+/*+ range [date("2003-06-30"), date("2005-12-31"), date("2008-06-30")] */
+interval_before(f.employment, d.attendance);
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/temporal/interval_joins/interval_covered_by/interval_covered_by.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/temporal/interval_joins/interval_covered_by/interval_covered_by.3.query.sqlpp
index 854cd59..bc4ec80 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/temporal/interval_joins/interval_covered_by/interval_covered_by.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/temporal/interval_joins/interval_covered_by/interval_covered_by.3.query.sqlpp
@@ -17,9 +17,9 @@
  * under the License.
  */
 /*
- * Description      :   Check temporal join functionality for interval
+ * Description      :   Check temporal join functionality for interval covered_by
  * Expected Result  :   Success
- * Date             :   21th Oct, 2019
+ * Date             :   10th Aug, 2019
  */
 
 drop dataverse TinyCollege if exists;
@@ -43,6 +43,8 @@ create type StudentType as open {
 create dataset Students(StudentType)
 primary key name;
 
-select element { "staff" : f.name, "student" : d.name }
+select element {  "staff" : f.name, "student" : d.name  }
 from Staff as f, Students as d
-where `interval-covered-by`(f.employment, d.attendance);
\ No newline at end of file
+where
+/*+ range [date("2003-06-30"), date("2005-12-31"), date("2008-06-30")] */
+interval_covered_by(f.employment, d.attendance);
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/temporal/interval_joins/interval_covers/interval_covers.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/temporal/interval_joins/interval_covers/interval_covers.3.query.sqlpp
index 1fa198d..a054f13 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/temporal/interval_joins/interval_covers/interval_covers.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/temporal/interval_joins/interval_covers/interval_covers.3.query.sqlpp
@@ -17,9 +17,9 @@
  * under the License.
  */
 /*
- * Description      :   Check temporal join functionality for interval
+ * Description      :   Check temporal join functionality for interval covers
  * Expected Result  :   Success
- * Date             :   21th Oct, 2019
+ * Date             :   10th Aug, 2019
  */
 
 drop dataverse TinyCollege if exists;
@@ -43,6 +43,8 @@ create type StudentType as open {
 create dataset Students(StudentType)
 primary key name;
 
-select element { "staff" : f.name, "student" : d.name }
+select element {  "staff" : f.name, "student" : d.name  }
 from Staff as f, Students as d
-where `interval-covers`(f.employment, d.attendance);
\ No newline at end of file
+where
+/*+ range [date("2003-06-30"), date("2005-12-31"), date("2008-06-30")] */
+interval_covers(f.employment, d.attendance);
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/temporal/interval_joins/interval_ended_by/interval_ended_by.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/temporal/interval_joins/interval_ended_by/interval_ended_by.3.query.sqlpp
index 1d48700..d683999 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/temporal/interval_joins/interval_ended_by/interval_ended_by.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/temporal/interval_joins/interval_ended_by/interval_ended_by.3.query.sqlpp
@@ -17,9 +17,11 @@
  * under the License.
  */
 /*
- * Description      :   Check temporal join functionality for interval
+ * Description      :   Check temporal join functionality for interval ended_by
  * Expected Result  :   Success
- * Date             :   21th Oct, 2019
+ * Date             :   10th Aug, 2019
+ * Note             :   Range hint is not used in ended_by because it is not implemented.
+ *                      This test will default to Hybrid Hash Join
  */
 
 drop dataverse TinyCollege if exists;
@@ -43,6 +45,8 @@ create type StudentType as open {
 create dataset Students(StudentType)
 primary key name;
 
-select element { "staff" : f.name, "student" : d.name }
+select element {  "staff" : f.name, "student" : d.name  }
 from Staff as f, Students as d
-where `interval-ended-by`(f.employment, d.attendance);
\ No newline at end of file
+where
+/*+ range [date("2003-06-30"), date("2005-12-31"), date("2008-06-30")] */
+interval_ended_by(f.employment, d.attendance);
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/temporal/interval_joins/interval_ends/interval_ends.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/temporal/interval_joins/interval_ends/interval_ends.3.query.sqlpp
index 14346f6..946edbc 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/temporal/interval_joins/interval_ends/interval_ends.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/temporal/interval_joins/interval_ends/interval_ends.3.query.sqlpp
@@ -17,9 +17,11 @@
  * under the License.
  */
 /*
- * Description      :   Check temporal join functionality for interval
+ * Description      :   Check temporal join functionality for interval ends
  * Expected Result  :   Success
- * Date             :   21th Oct, 2019
+ * Date             :   10th Aug, 2019
+ * Note             :   Range hint is not used in ends because it is not implemented.
+ *                      This test will default to Hybrid Hash Join
  */
 
 drop dataverse TinyCollege if exists;
@@ -43,6 +45,8 @@ create type StudentType as open {
 create dataset Students(StudentType)
 primary key name;
 
-select element { "staff" : f.name, "student" : d.name }
+select element {  "staff" : f.name, "student" : d.name  }
 from Staff as f, Students as d
-where `interval-ends`(f.employment, d.attendance);
\ No newline at end of file
+where
+/*+ range [date("2003-06-30"), date("2005-12-31"), date("2008-06-30")] */
+interval_ends(f.employment, d.attendance);
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/temporal/interval_joins/interval_meets/interval_meets.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/temporal/interval_joins/interval_meets/interval_meets.3.query.sqlpp
index 7bce341..9dc0710 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/temporal/interval_joins/interval_meets/interval_meets.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/temporal/interval_joins/interval_meets/interval_meets.3.query.sqlpp
@@ -17,9 +17,11 @@
  * under the License.
  */
 /*
- * Description      :   Check temporal join functionality for interval
+ * Description      :   Check temporal join functionality for interval meets
  * Expected Result  :   Success
- * Date             :   21th Oct, 2019
+ * Date             :   10th Aug, 2019
+ * Note             :   Range hint is not used in meets because it is not implemented.
+ *                      This test will default to Hybrid Hash Join
  */
 
 drop dataverse TinyCollege if exists;
@@ -43,6 +45,8 @@ create type StudentType as open {
 create dataset Students(StudentType)
 primary key name;
 
-select element { "staff" : f.name, "student" : d.name }
+select element {  "staff" : f.name, "student" : d.name  }
 from Staff as f, Students as d
-where `interval-meets`(f.employment, d.attendance);
\ No newline at end of file
+where
+/*+ range [date("2003-06-30"), date("2005-12-31"), date("2008-06-30")] */
+interval_meets(f.employment, d.attendance);
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/temporal/interval_joins/interval_met_by/interval_met_by.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/temporal/interval_joins/interval_met_by/interval_met_by.3.query.sqlpp
index 19f206d..720daf1 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/temporal/interval_joins/interval_met_by/interval_met_by.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/temporal/interval_joins/interval_met_by/interval_met_by.3.query.sqlpp
@@ -17,9 +17,11 @@
  * under the License.
  */
 /*
- * Description      :   Check temporal join functionality for interval
+ * Description      :   Check temporal join functionality for interval met_by
  * Expected Result  :   Success
- * Date             :   21th Oct, 2019
+ * Date             :   10th Aug, 2019
+ * Note             :   Range hint is not used in met_by because it is not implemented.
+ *                      This test will default to Hybrid Hash Join
  */
 
 drop dataverse TinyCollege if exists;
@@ -43,6 +45,8 @@ create type StudentType as open {
 create dataset Students(StudentType)
 primary key name;
 
-select element { "staff" : f.name, "student" : d.name }
+select element {  "staff" : f.name, "student" : d.name  }
 from Staff as f, Students as d
-where `interval-met-by`(f.employment, d.attendance);
\ No newline at end of file
+where
+/*+ range [date("2003-06-30"), date("2005-12-31"), date("2008-06-30")] */
+interval_met_by(f.employment, d.attendance);
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.3.query.sqlpp
index 72a1f50..38a5149 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.3.query.sqlpp
@@ -17,9 +17,9 @@
  * under the License.
  */
 /*
- * Description      :   Check temporal join functionality for interval
+ * Description      :   Check temporal join functionality for interval overlapped_by
  * Expected Result  :   Success
- * Date             :   21th Oct, 2019
+ * Date             :   10th Aug, 2019
  */
 
 drop dataverse TinyCollege if exists;
@@ -43,6 +43,8 @@ create type StudentType as open {
 create dataset Students(StudentType)
 primary key name;
 
-select element { "staff" : f.name, "student" : d.name }
+select element {  "staff" : f.name, "student" : d.name  }
 from Staff as f, Students as d
-where `interval-overlapped-by`(f.employment, d.attendance);
\ No newline at end of file
+where
+/*+ range [date("2003-06-30"), date("2005-12-31"), date("2008-06-30")] */
+interval_overlapped_by(f.employment, d.attendance);
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/temporal/interval_joins/interval_overlapping/interval_overlapping.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/temporal/interval_joins/interval_overlapping/interval_overlapping.3.query.sqlpp
index f1c3a68..71b43e7 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/temporal/interval_joins/interval_overlapping/interval_overlapping.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/temporal/interval_joins/interval_overlapping/interval_overlapping.3.query.sqlpp
@@ -17,9 +17,9 @@
  * under the License.
  */
 /*
- * Description      :   Check temporal join functionality for interval
+ * Description      :   Check temporal join functionality for interval overlapping
  * Expected Result  :   Success
- * Date             :   21th Oct, 2019
+ * Date             :   10th Aug, 2019
  */
 
 drop dataverse TinyCollege if exists;
@@ -43,6 +43,8 @@ create type StudentType as open {
 create dataset Students(StudentType)
 primary key name;
 
-select element { "staff" : f.name, "student" : d.name }
+select element {  "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-overlapping`(f.employment, d.attendance);
\ No newline at end of file
+where
+/*+ range [date("2003-06-30"), date("2005-12-31"), date("2008-06-30")] */
+interval_overlapping(f.employment, d.attendance);
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/temporal/interval_joins/interval_overlaps/interval_overlaps.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/temporal/interval_joins/interval_overlaps/interval_overlaps.3.query.sqlpp
index efb224f..2bf3fd4 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/temporal/interval_joins/interval_overlaps/interval_overlaps.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/temporal/interval_joins/interval_overlaps/interval_overlaps.3.query.sqlpp
@@ -17,9 +17,9 @@
  * under the License.
  */
 /*
- * Description      :   Check temporal join functionality for interval
+ * Description      :   Check temporal join functionality for interval overlaps
  * Expected Result  :   Success
- * Date             :   21th Oct, 2019
+ * Date             :   10th Aug, 2019
  */
 
 drop dataverse TinyCollege if exists;
@@ -43,6 +43,8 @@ create type StudentType as open {
 create dataset Students(StudentType)
 primary key name;
 
-select element { "staff" : f.name, "student" : d.name }
+select element {  "staff" : f.name, "student" : d.name  }
 from Staff as f, Students as d
-where `interval-overlaps`(f.employment, d.attendance);
\ No newline at end of file
+where
+/*+ range [date("2003-06-30"), date("2005-12-31"), date("2008-06-30")] */
+interval_overlaps(f.employment, d.attendance);
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/temporal/interval_joins/interval_started_by/interval_started_by.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/temporal/interval_joins/interval_started_by/interval_started_by.3.query.sqlpp
index 410504d..b19044a 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/temporal/interval_joins/interval_started_by/interval_started_by.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/temporal/interval_joins/interval_started_by/interval_started_by.3.query.sqlpp
@@ -17,9 +17,11 @@
  * under the License.
  */
 /*
- * Description      :   Check temporal join functionality for interval
+ * Description      :   Check temporal join functionality for interval started_by
  * Expected Result  :   Success
- * Date             :   21th Oct, 2019
+ * Date             :   10th Aug, 2019
+ * Note             :   Range hint is not used in started_by because it is not implemented.
+ *                      This test will default to Hybrid Hash Join
  */
 
 drop dataverse TinyCollege if exists;
@@ -43,6 +45,8 @@ create type StudentType as open {
 create dataset Students(StudentType)
 primary key name;
 
-select element { "staff" : f.name, "student" : d.name }
+select element {  "staff" : f.name, "student" : d.name  }
 from Staff as f, Students as d
-where `interval-started-by`(f.employment, d.attendance);
\ No newline at end of file
+where
+/*+ range [date("2003-06-30"), date("2005-12-31"), date("2008-06-30")] */
+interval_started_by(f.employment, d.attendance);
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/temporal/interval_joins/interval_starts/interval_starts.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/temporal/interval_joins/interval_starts/interval_starts.3.query.sqlpp
index 87ec386..38d855d 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/temporal/interval_joins/interval_starts/interval_starts.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/temporal/interval_joins/interval_starts/interval_starts.3.query.sqlpp
@@ -17,9 +17,11 @@
  * under the License.
  */
 /*
- * Description      :   Check temporal join functionality for interval
+ * Description      :   Check temporal join functionality for interval starts
  * Expected Result  :   Success
- * Date             :   21th Oct, 2019
+ * Date             :   10th Aug, 2019
+ * Note             :   Range hint is not used in ended_by because it is not implemented.
+ *                      This test will default to Hybrid Hash Join
  */
 
 drop dataverse TinyCollege if exists;
@@ -43,6 +45,8 @@ create type StudentType as open {
 create dataset Students(StudentType)
 primary key name;
 
-select element { "staff" : f.name, "student" : d.name }
+select element {  "staff" : f.name, "student" : d.name  }
 from Staff as f, Students as d
-where `interval-starts`(f.employment, d.attendance);
\ No newline at end of file
+where
+/*+ range [date("2003-06-30"), date("2005-12-31"), date("2008-06-30")] */
+interval_starts(f.employment, d.attendance);
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/temporal/interval_joins/interval_after/interval_after.3.query.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/temporal/interval_joins/interval_after/interval_after.3.query.plan
index 6ac3ccc..1aab448 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/temporal/interval_joins/interval_after/interval_after.3.query.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/temporal/interval_joins/interval_after/interval_after.3.query.plan
@@ -2,21 +2,30 @@
   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
     -- STREAM_PROJECT  |PARTITIONED|
       -- ASSIGN  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- NESTED_LOOP  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- STREAM_PROJECT  |PARTITIONED|
-                -- ASSIGN  |PARTITIONED|
-                  -- STREAM_PROJECT  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- DATASOURCE_SCAN  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-            -- BROADCAST_EXCHANGE  |PARTITIONED|
-              -- STREAM_PROJECT  |PARTITIONED|
-                -- ASSIGN  |PARTITIONED|
-                  -- STREAM_PROJECT  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- DATASOURCE_SCAN  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- INTERVAL_MERGE_JOIN [$$30] [$$31]  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- STABLE_SORT [$$30(ASC)]  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- RANGE_PARTITION_EXCHANGE [$$34(ASC)] RANGE_MAP:{SPLIT:3}  |PARTITIONED|
+                        -- ASSIGN  |PARTITIONED|
+                          -- STREAM_PROJECT  |PARTITIONED|
+                            -- ASSIGN  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- DATASOURCE_SCAN  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- STABLE_SORT [$$31(ASC)]  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- PARTIAL_BROADCAST_RANGE_FOLLOWING_EXCHANGE [$$36(ASC)] RANGE_MAP:{SPLIT:3}  |PARTITIONED|
+                        -- ASSIGN  |PARTITIONED|
+                          -- STREAM_PROJECT  |PARTITIONED|
+                            -- ASSIGN  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- DATASOURCE_SCAN  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/temporal/interval_joins/interval_before/interval_before.3.query.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/temporal/interval_joins/interval_before/interval_before.3.query.plan
index 757511d..883bfed 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/temporal/interval_joins/interval_before/interval_before.3.query.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/temporal/interval_joins/interval_before/interval_before.3.query.plan
@@ -4,18 +4,28 @@
       -- ASSIGN  |PARTITIONED|
         -- STREAM_PROJECT  |PARTITIONED|
           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- NESTED_LOOP  |PARTITIONED|
+            -- INTERVAL_MERGE_JOIN [$$30] [$$31]  |PARTITIONED|
               -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- ASSIGN  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- DATASOURCE_SCAN  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- BROADCAST_EXCHANGE  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- ASSIGN  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- DATASOURCE_SCAN  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                -- STABLE_SORT [$$30(ASC)]  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- PARTIAL_BROADCAST_RANGE_FOLLOWING_EXCHANGE [$$34(ASC)] RANGE_MAP:{SPLIT:3}  |PARTITIONED|
+                        -- ASSIGN  |PARTITIONED|
+                          -- STREAM_PROJECT  |PARTITIONED|
+                            -- ASSIGN  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- DATASOURCE_SCAN  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- STABLE_SORT [$$31(ASC)]  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- RANGE_PARTITION_EXCHANGE [$$36(ASC)] RANGE_MAP:{SPLIT:3}  |PARTITIONED|
+                        -- ASSIGN  |PARTITIONED|
+                          -- STREAM_PROJECT  |PARTITIONED|
+                            -- ASSIGN  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- DATASOURCE_SCAN  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/temporal/interval_joins/interval_covered_by/interval_covered_by.3.query.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/temporal/interval_joins/interval_covered_by/interval_covered_by.3.query.plan
index 757511d..a9f6d74 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/temporal/interval_joins/interval_covered_by/interval_covered_by.3.query.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/temporal/interval_joins/interval_covered_by/interval_covered_by.3.query.plan
@@ -4,18 +4,28 @@
       -- ASSIGN  |PARTITIONED|
         -- STREAM_PROJECT  |PARTITIONED|
           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- NESTED_LOOP  |PARTITIONED|
+            -- INTERVAL_MERGE_JOIN [$$30] [$$31]  |PARTITIONED|
               -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- ASSIGN  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- DATASOURCE_SCAN  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- BROADCAST_EXCHANGE  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- ASSIGN  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- DATASOURCE_SCAN  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                -- STABLE_SORT [$$30(ASC)]  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- RANGE_PARTITION_EXCHANGE [$$34(ASC)] RANGE_MAP:{SPLIT:3}  |PARTITIONED|
+                        -- ASSIGN  |PARTITIONED|
+                          -- STREAM_PROJECT  |PARTITIONED|
+                            -- ASSIGN  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- DATASOURCE_SCAN  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- STABLE_SORT [$$31(ASC)]  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- PARTIAL_BROADCAST_RANGE_INTERSECT_EXCHANGE [{$$36,$$37,ASC}] RANGE_MAP:{SPLIT:3}  |PARTITIONED|
+                        -- ASSIGN  |PARTITIONED|
+                          -- STREAM_PROJECT  |PARTITIONED|
+                            -- ASSIGN  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- DATASOURCE_SCAN  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/temporal/interval_joins/interval_covers/interval_covers.3.query.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/temporal/interval_joins/interval_covers/interval_covers.3.query.plan
index 757511d..d67dc29 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/temporal/interval_joins/interval_covers/interval_covers.3.query.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/temporal/interval_joins/interval_covers/interval_covers.3.query.plan
@@ -4,18 +4,28 @@
       -- ASSIGN  |PARTITIONED|
         -- STREAM_PROJECT  |PARTITIONED|
           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- NESTED_LOOP  |PARTITIONED|
+            -- INTERVAL_MERGE_JOIN [$$30] [$$31]  |PARTITIONED|
               -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- ASSIGN  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- DATASOURCE_SCAN  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- BROADCAST_EXCHANGE  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- ASSIGN  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- DATASOURCE_SCAN  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                -- STABLE_SORT [$$30(ASC)]  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- PARTIAL_BROADCAST_RANGE_INTERSECT_EXCHANGE [{$$34,$$35,ASC}] RANGE_MAP:{SPLIT:3}  |PARTITIONED|
+                        -- ASSIGN  |PARTITIONED|
+                          -- STREAM_PROJECT  |PARTITIONED|
+                            -- ASSIGN  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- DATASOURCE_SCAN  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- STABLE_SORT [$$31(ASC)]  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- RANGE_PARTITION_EXCHANGE [$$36(ASC)] RANGE_MAP:{SPLIT:3}  |PARTITIONED|
+                        -- ASSIGN  |PARTITIONED|
+                          -- STREAM_PROJECT  |PARTITIONED|
+                            -- ASSIGN  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- DATASOURCE_SCAN  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.3.query.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.3.query.plan
index 757511d..a9f6d74 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.3.query.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.3.query.plan
@@ -4,18 +4,28 @@
       -- ASSIGN  |PARTITIONED|
         -- STREAM_PROJECT  |PARTITIONED|
           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- NESTED_LOOP  |PARTITIONED|
+            -- INTERVAL_MERGE_JOIN [$$30] [$$31]  |PARTITIONED|
               -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- ASSIGN  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- DATASOURCE_SCAN  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- BROADCAST_EXCHANGE  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- ASSIGN  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- DATASOURCE_SCAN  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                -- STABLE_SORT [$$30(ASC)]  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- RANGE_PARTITION_EXCHANGE [$$34(ASC)] RANGE_MAP:{SPLIT:3}  |PARTITIONED|
+                        -- ASSIGN  |PARTITIONED|
+                          -- STREAM_PROJECT  |PARTITIONED|
+                            -- ASSIGN  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- DATASOURCE_SCAN  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- STABLE_SORT [$$31(ASC)]  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- PARTIAL_BROADCAST_RANGE_INTERSECT_EXCHANGE [{$$36,$$37,ASC}] RANGE_MAP:{SPLIT:3}  |PARTITIONED|
+                        -- ASSIGN  |PARTITIONED|
+                          -- STREAM_PROJECT  |PARTITIONED|
+                            -- ASSIGN  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- DATASOURCE_SCAN  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/temporal/interval_joins/interval_overlapping/interval_overlapping.3.query.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/temporal/interval_joins/interval_overlapping/interval_overlapping.3.query.plan
index 757511d..9f4a00d 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/temporal/interval_joins/interval_overlapping/interval_overlapping.3.query.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/temporal/interval_joins/interval_overlapping/interval_overlapping.3.query.plan
@@ -4,18 +4,28 @@
       -- ASSIGN  |PARTITIONED|
         -- STREAM_PROJECT  |PARTITIONED|
           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- NESTED_LOOP  |PARTITIONED|
+            -- INTERVAL_MERGE_JOIN [$$30] [$$31]  |PARTITIONED|
               -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- ASSIGN  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- DATASOURCE_SCAN  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- BROADCAST_EXCHANGE  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- ASSIGN  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- DATASOURCE_SCAN  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                -- STABLE_SORT [$$30(ASC)]  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- PARTIAL_BROADCAST_RANGE_INTERSECT_EXCHANGE [{$$34,$$35,ASC}] RANGE_MAP:{SPLIT:3}  |PARTITIONED|
+                        -- ASSIGN  |PARTITIONED|
+                          -- STREAM_PROJECT  |PARTITIONED|
+                            -- ASSIGN  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- DATASOURCE_SCAN  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- STABLE_SORT [$$31(ASC)]  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- PARTIAL_BROADCAST_RANGE_INTERSECT_EXCHANGE [{$$36,$$37,ASC}] RANGE_MAP:{SPLIT:3}  |PARTITIONED|
+                        -- ASSIGN  |PARTITIONED|
+                          -- STREAM_PROJECT  |PARTITIONED|
+                            -- ASSIGN  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- DATASOURCE_SCAN  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/temporal/interval_joins/interval_overlaps/interval_overlaps.3.query.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/temporal/interval_joins/interval_overlaps/interval_overlaps.3.query.plan
index 757511d..d67dc29 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/temporal/interval_joins/interval_overlaps/interval_overlaps.3.query.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/temporal/interval_joins/interval_overlaps/interval_overlaps.3.query.plan
@@ -4,18 +4,28 @@
       -- ASSIGN  |PARTITIONED|
         -- STREAM_PROJECT  |PARTITIONED|
           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- NESTED_LOOP  |PARTITIONED|
+            -- INTERVAL_MERGE_JOIN [$$30] [$$31]  |PARTITIONED|
               -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- ASSIGN  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- DATASOURCE_SCAN  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- BROADCAST_EXCHANGE  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- ASSIGN  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- DATASOURCE_SCAN  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                -- STABLE_SORT [$$30(ASC)]  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- PARTIAL_BROADCAST_RANGE_INTERSECT_EXCHANGE [{$$34,$$35,ASC}] RANGE_MAP:{SPLIT:3}  |PARTITIONED|
+                        -- ASSIGN  |PARTITIONED|
+                          -- STREAM_PROJECT  |PARTITIONED|
+                            -- ASSIGN  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- DATASOURCE_SCAN  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- STABLE_SORT [$$31(ASC)]  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- RANGE_PARTITION_EXCHANGE [$$36(ASC)] RANGE_MAP:{SPLIT:3}  |PARTITIONED|
+                        -- ASSIGN  |PARTITIONED|
+                          -- STREAM_PROJECT  |PARTITIONED|
+                            -- ASSIGN  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- DATASOURCE_SCAN  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.1.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.1.ddl.sqlpp
index fdef960..9ea732a 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.1.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.1.ddl.sqlpp
@@ -19,7 +19,7 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 drop dataverse TinyCollege if exists;
@@ -29,7 +29,9 @@ use TinyCollege;
 create type StaffType as open {
         name: string,
         office: string,
-        employment: interval
+        employment: interval,
+        vacation: interval,
+        office_hours: interval
 };
 create dataset Staff(StaffType)
 primary key name;
@@ -38,7 +40,10 @@ primary key name;
 create type StudentType as open {
         name: string,
         office: string,
-        attendance: interval
+        attendance: interval,
+        break: interval,
+        work_hours: interval
 };
 create dataset Students(StudentType)
 primary key name;
+
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.10.query.sqlpp
similarity index 83%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.10.query.sqlpp
index 39e3372..3504834 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.10.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [datetime("2003-06-30T00:00:00.0"), datetime("2005-12-31T00:00:00.0"), datetime("2008-06-30T00:00:00.0")] */
+interval_after(d.break, f.vacation)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.11.query.sqlpp
similarity index 85%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.11.query.sqlpp
index 4644367..45406b1 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.11.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-before`(f.employment, d.attendance)
+where
+/*+ range [time("03:30:00.0+00:00"), time("05:59:00.0+00:00"), time("08:30:00.0+00:00")] */
+interval_after(f.office_hours, d.work_hours)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.12.query.sqlpp
similarity index 85%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.12.query.sqlpp
index 4644367..3baabf1 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.12.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-before`(f.employment, d.attendance)
+where
+/*+ range [time("03:30:00.0+00:00"), time("05:59:00.0+00:00"), time("08:30:00.0+00:00")] */
+interval_after(d.work_hours, f.office_hours)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.13.query.sqlpp
similarity index 85%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.13.query.sqlpp
index 39e3372..6b91ac9 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.13.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [time("03:30:00.0+00:00"), time("05:59:00.0+00:00"), time("08:30:00.0+00:00")] */
+interval_after(f.office_hours, d.work_hours)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.14.query.sqlpp
similarity index 85%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.14.query.sqlpp
index 39e3372..c5f2280 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.14.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [time("03:30:00.0+00:00"), time("05:59:00.0+00:00"), time("08:30:00.0+00:00")] */
+interval_after(d.work_hours, f.office_hours)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.2.update.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.2.update.sqlpp
index 4334476..b7cd541 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.2.update.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.2.update.sqlpp
@@ -19,7 +19,7 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp
index a303827..6668205 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   9th January 2019
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [date("2003-06-30"), date("2005-12-31"), date("2008-06-30")] */
+interval_after(f.employment, d.attendance)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.4.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.4.query.sqlpp
index fa439c1..31ba5aa 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.4.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.4.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-after`(d.attendance, f.employment)
+where
+/*+ range [date("2003-06-30"), date("2005-12-31"), date("2008-06-30")] */
+interval_after(d.attendance, f.employment)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
index 39e3372..c9308fd 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [date("2003-06-30"), date("2005-12-31"), date("2008-06-30")] */
+interval_after(f.employment, d.attendance)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.6.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.6.query.sqlpp
index eb2797b..48118d4 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.6.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.6.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-after`(d.attendance, f.employment)
+where
+/*+ range [date("2003-06-30"), date("2005-12-31"), date("2008-06-30")] */
+interval_after(d.attendance, f.employment)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.7.query.sqlpp
similarity index 83%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.7.query.sqlpp
index 4644367..a013ac9 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.7.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-before`(f.employment, d.attendance)
+where
+/*+ range [datetime("2003-06-30T00:00:00.0"), datetime("2005-12-31T00:00:00.0"), datetime("2008-06-30T00:00:00.0")] */
+interval_after(f.vacation, d.break)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.8.query.sqlpp
similarity index 83%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.8.query.sqlpp
index 4644367..690e5b5 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.8.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-before`(f.employment, d.attendance)
+where
+/*+ range [datetime("2003-06-30T00:00:00.0"), datetime("2005-12-31T00:00:00.0"), datetime("2008-06-30T00:00:00.0")] */
+interval_after(d.break, f.vacation)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.9.query.sqlpp
similarity index 83%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.9.query.sqlpp
index 39e3372..c57cfc7 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.9.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [datetime("2003-06-30T00:00:00.0"), datetime("2005-12-31T00:00:00.0"), datetime("2008-06-30T00:00:00.0")] */
+interval_after(f.vacation, d.break)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.1.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.1.ddl.sqlpp
index fdef960..ae840c3 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.1.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.1.ddl.sqlpp
@@ -19,7 +19,7 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 drop dataverse TinyCollege if exists;
@@ -29,7 +29,9 @@ use TinyCollege;
 create type StaffType as open {
         name: string,
         office: string,
-        employment: interval
+        employment: interval,
+        vacation: interval,
+        office_hours: interval
 };
 create dataset Staff(StaffType)
 primary key name;
@@ -38,7 +40,9 @@ primary key name;
 create type StudentType as open {
         name: string,
         office: string,
-        attendance: interval
+        attendance: interval,
+        break: interval,
+        work_hours: interval
 };
 create dataset Students(StudentType)
 primary key name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.10.query.sqlpp
similarity index 83%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.10.query.sqlpp
index 39e3372..9e22e04 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.10.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [datetime("2003-06-30T00:00:00.0"), datetime("2005-12-31T00:00:00.0"), datetime("2008-06-30T00:00:00.0")] */
+interval_before(d.break, f.vacation)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.11.query.sqlpp
similarity index 85%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.11.query.sqlpp
index 4644367..b93f969 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.11.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-before`(f.employment, d.attendance)
+where
+/*+ range [time("03:30:00.0+00:00"), time("05:59:00.0+00:00"), time("08:30:00.0+00:00")] */
+interval_before(f.office_hours, d.work_hours)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.12.query.sqlpp
similarity index 85%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.12.query.sqlpp
index 4644367..6ffb1cb 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.12.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-before`(f.employment, d.attendance)
+where
+/*+ range [time("03:30:00.0+00:00"), time("05:59:00.0+00:00"), time("08:30:00.0+00:00")] */
+interval_before(d.work_hours, f.office_hours)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.13.query.sqlpp
similarity index 85%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.13.query.sqlpp
index 39e3372..295f895 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.13.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [time("03:30:00.0+00:00"), time("05:59:00.0+00:00"), time("08:30:00.0+00:00")] */
+interval_before(f.office_hours, d.work_hours)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.14.query.sqlpp
similarity index 85%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.14.query.sqlpp
index 39e3372..6d0e028 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.14.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [time("03:30:00.0+00:00"), time("05:59:00.0+00:00"), time("08:30:00.0+00:00")] */
+interval_before(d.work_hours, f.office_hours)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.2.update.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.2.update.sqlpp
index 4334476..b7cd541 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.2.update.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.2.update.sqlpp
@@ -19,7 +19,7 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp
index 4644367..faf9e7e 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-before`(f.employment, d.attendance)
+where
+/*+ range [date("2003-06-30"), date("2005-12-31"), date("2008-06-30")] */
+interval_before(f.employment, d.attendance)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.4.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.4.query.sqlpp
index 8db7596..6c1f734 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.4.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.4.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-before`(d.attendance, f.employment)
+where
+/*+ range [date("2003-06-30"), date("2005-12-31"), date("2008-06-30")] */
+interval_before(d.attendance, f.employment)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.5.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.5.query.sqlpp
index 3769ff3..c7e34d8 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.5.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.5.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-before`(f.employment, d.attendance)
+where
+/*+ range [date("2003-06-30"), date("2005-12-31"), date("2008-06-30")] */
+interval_before(f.employment, d.attendance)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.6.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.6.query.sqlpp
index 70ab1ea..27185d1 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.6.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.6.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-before`(d.attendance, f.employment)
+where
+/*+ range [date("2003-06-30"), date("2005-12-31"), date("2008-06-30")] */
+interval_before(d.attendance, f.employment)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.7.query.sqlpp
similarity index 83%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.7.query.sqlpp
index 4644367..c184704 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.7.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-before`(f.employment, d.attendance)
+where
+/*+ range [datetime("2003-06-30T00:00:00.0"), datetime("2005-12-31T00:00:00.0"), datetime("2008-06-30T00:00:00.0")] */
+interval_before(f.vacation, d.break)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.8.query.sqlpp
similarity index 83%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.8.query.sqlpp
index 4644367..7425bce 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.8.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-before`(f.employment, d.attendance)
+where
+/*+ range [datetime("2003-06-30T00:00:00.0"), datetime("2005-12-31T00:00:00.0"), datetime("2008-06-30T00:00:00.0")] */
+interval_before(d.break, f.vacation)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.9.query.sqlpp
similarity index 83%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.9.query.sqlpp
index 39e3372..5089141 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.9.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [datetime("2003-06-30T00:00:00.0"), datetime("2005-12-31T00:00:00.0"), datetime("2008-06-30T00:00:00.0")] */
+interval_before(f.vacation, d.break)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covered_by/interval_covered_by.1.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covered_by/interval_covered_by.1.ddl.sqlpp
index fdef960..ae840c3 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covered_by/interval_covered_by.1.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covered_by/interval_covered_by.1.ddl.sqlpp
@@ -19,7 +19,7 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 drop dataverse TinyCollege if exists;
@@ -29,7 +29,9 @@ use TinyCollege;
 create type StaffType as open {
         name: string,
         office: string,
-        employment: interval
+        employment: interval,
+        vacation: interval,
+        office_hours: interval
 };
 create dataset Staff(StaffType)
 primary key name;
@@ -38,7 +40,9 @@ primary key name;
 create type StudentType as open {
         name: string,
         office: string,
-        attendance: interval
+        attendance: interval,
+        break: interval,
+        work_hours: interval
 };
 create dataset Students(StudentType)
 primary key name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covered_by/interval_covered_by.10.query.sqlpp
similarity index 83%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covered_by/interval_covered_by.10.query.sqlpp
index 39e3372..d71029a 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covered_by/interval_covered_by.10.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [datetime("2003-06-30T00:00:00.0"), datetime("2005-12-31T00:00:00.0"), datetime("2008-06-30T00:00:00.0")] */
+interval_covered_by(d.break, f.vacation)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covered_by/interval_covered_by.11.query.sqlpp
similarity index 84%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covered_by/interval_covered_by.11.query.sqlpp
index 4644367..e635228 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covered_by/interval_covered_by.11.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-before`(f.employment, d.attendance)
+where
+/*+ range [time("03:30:00.0+00:00"), time("05:59:00.0+00:00"), time("08:30:00.0+00:00")] */
+interval_covered_by(f.office_hours, d.work_hours)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covered_by/interval_covered_by.12.query.sqlpp
similarity index 84%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covered_by/interval_covered_by.12.query.sqlpp
index 4644367..25d22d5 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covered_by/interval_covered_by.12.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-before`(f.employment, d.attendance)
+where
+/*+ range [time("03:30:00.0+00:00"), time("05:59:00.0+00:00"), time("08:30:00.0+00:00")] */
+interval_covered_by(d.work_hours, f.office_hours)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covered_by/interval_covered_by.13.query.sqlpp
similarity index 84%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covered_by/interval_covered_by.13.query.sqlpp
index 39e3372..1f287ef 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covered_by/interval_covered_by.13.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [time("03:30:00.0+00:00"), time("05:59:00.0+00:00"), time("08:30:00.0+00:00")] */
+interval_covered_by(f.office_hours, d.work_hours)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covered_by/interval_covered_by.14.query.sqlpp
similarity index 84%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covered_by/interval_covered_by.14.query.sqlpp
index 39e3372..881f62e 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covered_by/interval_covered_by.14.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [time("03:30:00.0+00:00"), time("05:59:00.0+00:00"), time("08:30:00.0+00:00")] */
+interval_covered_by(d.work_hours, f.office_hours)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covered_by/interval_covered_by.2.update.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covered_by/interval_covered_by.2.update.sqlpp
index 4334476..b7cd541 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covered_by/interval_covered_by.2.update.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covered_by/interval_covered_by.2.update.sqlpp
@@ -19,7 +19,7 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covered_by/interval_covered_by.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covered_by/interval_covered_by.3.query.sqlpp
index cdd6744..3458df9 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covered_by/interval_covered_by.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covered_by/interval_covered_by.3.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-covered-by`(f.employment, d.attendance)
+where
+/*+ range [date("2003-06-30"), date("2005-12-31"), date("2008-06-30")] */
+interval_covered_by(f.employment, d.attendance)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covered_by/interval_covered_by.4.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covered_by/interval_covered_by.4.query.sqlpp
index 2209a6a..2deb6e6 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covered_by/interval_covered_by.4.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covered_by/interval_covered_by.4.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-covered-by`(d.attendance, f.employment)
+where
+/*+ range [date("2003-06-30"), date("2005-12-31"), date("2008-06-30")] */
+interval_covered_by(d.attendance, f.employment)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covered_by/interval_covered_by.5.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covered_by/interval_covered_by.5.query.sqlpp
index 69ac8d5..fa931af 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covered_by/interval_covered_by.5.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covered_by/interval_covered_by.5.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-covered-by`(f.employment, d.attendance)
+where
+/*+ range [date("2003-06-30"), date("2005-12-31"), date("2008-06-30")] */
+interval_covered_by(f.employment, d.attendance)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covered_by/interval_covered_by.6.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covered_by/interval_covered_by.6.query.sqlpp
index 467200a..0010b26 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covered_by/interval_covered_by.6.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covered_by/interval_covered_by.6.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-covered-by`(d.attendance, f.employment)
+where
+/*+ range [date("2003-06-30"), date("2005-12-31"), date("2008-06-30")] */
+interval_covered_by(d.attendance, f.employment)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covered_by/interval_covered_by.7.query.sqlpp
similarity index 83%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covered_by/interval_covered_by.7.query.sqlpp
index 4644367..5bf5d4a 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covered_by/interval_covered_by.7.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-before`(f.employment, d.attendance)
+where
+/*+ range [datetime("2003-06-30T00:00:00.0"), datetime("2005-12-31T00:00:00.0"), datetime("2008-06-30T00:00:00.0")] */
+interval_covered_by(f.vacation, d.break)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covered_by/interval_covered_by.8.query.sqlpp
similarity index 83%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covered_by/interval_covered_by.8.query.sqlpp
index 4644367..83f7beb 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covered_by/interval_covered_by.8.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-before`(f.employment, d.attendance)
+where
+/*+ range [datetime("2003-06-30T00:00:00.0"), datetime("2005-12-31T00:00:00.0"), datetime("2008-06-30T00:00:00.0")] */
+interval_covered_by(d.break, f.vacation)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covered_by/interval_covered_by.9.query.sqlpp
similarity index 83%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covered_by/interval_covered_by.9.query.sqlpp
index 39e3372..46ba991 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covered_by/interval_covered_by.9.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [datetime("2003-06-30T00:00:00.0"), datetime("2005-12-31T00:00:00.0"), datetime("2008-06-30T00:00:00.0")] */
+interval_covered_by(f.vacation, d.break)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covers/interval_covers.1.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covers/interval_covers.1.ddl.sqlpp
index fdef960..ae840c3 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covers/interval_covers.1.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covers/interval_covers.1.ddl.sqlpp
@@ -19,7 +19,7 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 drop dataverse TinyCollege if exists;
@@ -29,7 +29,9 @@ use TinyCollege;
 create type StaffType as open {
         name: string,
         office: string,
-        employment: interval
+        employment: interval,
+        vacation: interval,
+        office_hours: interval
 };
 create dataset Staff(StaffType)
 primary key name;
@@ -38,7 +40,9 @@ primary key name;
 create type StudentType as open {
         name: string,
         office: string,
-        attendance: interval
+        attendance: interval,
+        break: interval,
+        work_hours: interval
 };
 create dataset Students(StudentType)
 primary key name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covers/interval_covers.10.query.sqlpp
similarity index 83%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covers/interval_covers.10.query.sqlpp
index 39e3372..16f53dd 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covers/interval_covers.10.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [datetime("2003-06-30T00:00:00.0"), datetime("2005-12-31T00:00:00.0"), datetime("2008-06-30T00:00:00.0")] */
+interval_covers(d.break, f.vacation)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covers/interval_covers.11.query.sqlpp
similarity index 85%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covers/interval_covers.11.query.sqlpp
index 4644367..94db651 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covers/interval_covers.11.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-before`(f.employment, d.attendance)
+where
+/*+ range [time("03:30:00.0+00:00"), time("05:59:00.0+00:00"), time("08:30:00.0+00:00")] */
+interval_covers(f.office_hours, d.work_hours)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covers/interval_covers.12.query.sqlpp
similarity index 85%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covers/interval_covers.12.query.sqlpp
index 4644367..fbc64ab 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covers/interval_covers.12.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-before`(f.employment, d.attendance)
+where
+/*+ range [time("03:30:00.0+00:00"), time("05:59:00.0+00:00"), time("08:30:00.0+00:00")] */
+interval_covers(d.work_hours, f.office_hours)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covers/interval_covers.13.query.sqlpp
similarity index 85%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covers/interval_covers.13.query.sqlpp
index 39e3372..bdd439e 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covers/interval_covers.13.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [time("03:30:00.0+00:00"), time("05:59:00.0+00:00"), time("08:30:00.0+00:00")] */
+interval_covers(f.office_hours, d.work_hours)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covers/interval_covers.14.query.sqlpp
similarity index 85%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covers/interval_covers.14.query.sqlpp
index 39e3372..dddf7bd 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covers/interval_covers.14.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [time("03:30:00.0+00:00"), time("05:59:00.0+00:00"), time("08:30:00.0+00:00")] */
+interval_covers(d.work_hours, f.office_hours)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covers/interval_covers.2.update.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covers/interval_covers.2.update.sqlpp
index 4334476..b7cd541 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covers/interval_covers.2.update.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covers/interval_covers.2.update.sqlpp
@@ -19,7 +19,7 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covers/interval_covers.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covers/interval_covers.3.query.sqlpp
index 2816cfb..bc2e0b5 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covers/interval_covers.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covers/interval_covers.3.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-covers`(f.employment, d.attendance)
+where
+/*+ range [date("2003-06-30"), date("2005-12-31"), date("2008-06-30")] */
+interval_covers(f.employment, d.attendance)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covers/interval_covers.4.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covers/interval_covers.4.query.sqlpp
index 0241040..c22cc60 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covers/interval_covers.4.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covers/interval_covers.4.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-covers`(d.attendance, f.employment)
+where
+/*+ range [date("2003-06-30"), date("2005-12-31"), date("2008-06-30")] */
+interval_covers(d.attendance, f.employment)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covers/interval_covers.5.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covers/interval_covers.5.query.sqlpp
index 8e600d0..9a2c572 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covers/interval_covers.5.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covers/interval_covers.5.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-covers`(f.employment, d.attendance)
+where
+/*+ range [date("2003-06-30"), date("2005-12-31"), date("2008-06-30")] */
+interval_covers(f.employment, d.attendance)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covers/interval_covers.6.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covers/interval_covers.6.query.sqlpp
index d4a3760..89d9ada 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covers/interval_covers.6.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covers/interval_covers.6.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-covers`(d.attendance, f.employment)
+where
+/*+ range [date("2003-06-30"), date("2005-12-31"), date("2008-06-30")] */
+interval_covers(d.attendance, f.employment)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covers/interval_covers.7.query.sqlpp
similarity index 83%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covers/interval_covers.7.query.sqlpp
index 4644367..ba156f1 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covers/interval_covers.7.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-before`(f.employment, d.attendance)
+where
+/*+ range [datetime("2003-06-30T00:00:00.0"), datetime("2005-12-31T00:00:00.0"), datetime("2008-06-30T00:00:00.0")] */
+interval_covers(f.vacation, d.break)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covers/interval_covers.8.query.sqlpp
similarity index 83%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covers/interval_covers.8.query.sqlpp
index 4644367..051620d 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covers/interval_covers.8.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-before`(f.employment, d.attendance)
+where
+/*+ range [datetime("2003-06-30T00:00:00.0"), datetime("2005-12-31T00:00:00.0"), datetime("2008-06-30T00:00:00.0")] */
+interval_covers(d.break, f.vacation)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covers/interval_covers.9.query.sqlpp
similarity index 83%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covers/interval_covers.9.query.sqlpp
index 39e3372..dbd1fba 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_covers/interval_covers.9.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [datetime("2003-06-30T00:00:00.0"), datetime("2005-12-31T00:00:00.0"), datetime("2008-06-30T00:00:00.0")] */
+interval_covers(f.vacation, d.break)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ended_by/interval_ended_by.1.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ended_by/interval_ended_by.1.ddl.sqlpp
index fdef960..07166ca 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ended_by/interval_ended_by.1.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ended_by/interval_ended_by.1.ddl.sqlpp
@@ -19,7 +19,9 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval ended_by because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 drop dataverse TinyCollege if exists;
@@ -29,7 +31,9 @@ use TinyCollege;
 create type StaffType as open {
         name: string,
         office: string,
-        employment: interval
+        employment: interval,
+        vacation: interval,
+        office_hours: interval
 };
 create dataset Staff(StaffType)
 primary key name;
@@ -38,7 +42,9 @@ primary key name;
 create type StudentType as open {
         name: string,
         office: string,
-        attendance: interval
+        attendance: interval,
+        break: interval,
+        work_hours: interval
 };
 create dataset Students(StudentType)
 primary key name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ended_by/interval_ended_by.10.query.sqlpp
similarity index 74%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ended_by/interval_ended_by.10.query.sqlpp
index 39e3372..390daaa 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ended_by/interval_ended_by.10.query.sqlpp
@@ -19,12 +19,16 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval ended_by because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [datetime("2003-06-30T00:00:00.0"), datetime("2005-12-31T00:00:00.0"), datetime("2008-06-30T00:00:00.0")] */
+interval_ended_by(d.break, f.vacation)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ended_by/interval_ended_by.11.query.sqlpp
similarity index 75%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ended_by/interval_ended_by.11.query.sqlpp
index a303827..2986aa9 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ended_by/interval_ended_by.11.query.sqlpp
@@ -19,12 +19,16 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   9th January 2019
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval ended_by because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [time("03:30:00.0+00:00"), time("05:59:00.0+00:00"), time("08:30:00.0+00:00")] */
+interval_ended_by(f.office_hours, d.work_hours)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ended_by/interval_ended_by.12.query.sqlpp
similarity index 75%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ended_by/interval_ended_by.12.query.sqlpp
index a303827..0520104 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ended_by/interval_ended_by.12.query.sqlpp
@@ -19,12 +19,16 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   9th January 2019
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval ended_by because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [time("03:30:00.0+00:00"), time("05:59:00.0+00:00"), time("08:30:00.0+00:00")] */
+interval_ended_by(d.work_hours, f.office_hours)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ended_by/interval_ended_by.13.query.sqlpp
similarity index 75%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ended_by/interval_ended_by.13.query.sqlpp
index 39e3372..62f72b6 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ended_by/interval_ended_by.13.query.sqlpp
@@ -19,12 +19,16 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval ended_by because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [time("03:30:00.0+00:00"), time("05:59:00.0+00:00"), time("08:30:00.0+00:00")] */
+interval_ended_by(f.office_hours, d.work_hours)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ended_by/interval_ended_by.14.query.sqlpp
similarity index 75%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ended_by/interval_ended_by.14.query.sqlpp
index 39e3372..09ff8b4 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ended_by/interval_ended_by.14.query.sqlpp
@@ -19,12 +19,16 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval ended_by because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [time("03:30:00.0+00:00"), time("05:59:00.0+00:00"), time("08:30:00.0+00:00")] */
+interval_ended_by(d.work_hours, f.office_hours)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ended_by/interval_ended_by.2.update.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ended_by/interval_ended_by.2.update.sqlpp
index 4334476..49648a4 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ended_by/interval_ended_by.2.update.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ended_by/interval_ended_by.2.update.sqlpp
@@ -19,7 +19,9 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval ended_by because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ended_by/interval_ended_by.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ended_by/interval_ended_by.3.query.sqlpp
index 96b63c5..5d410ae 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ended_by/interval_ended_by.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ended_by/interval_ended_by.3.query.sqlpp
@@ -19,12 +19,16 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval ended_by because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-ended-by`(f.employment, d.attendance)
+where
+/*+ range [date("2003-06-30"), date("2005-12-31"), date("2008-06-30")] */
+interval_ended_by(f.employment, d.attendance)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ended_by/interval_ended_by.4.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ended_by/interval_ended_by.4.query.sqlpp
index 74929b2..ef30f3e 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ended_by/interval_ended_by.4.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ended_by/interval_ended_by.4.query.sqlpp
@@ -19,12 +19,16 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval ended_by because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-ended-by`(d.attendance, f.employment)
+where
+/*+ range [date("2003-06-30"), date("2005-12-31"), date("2008-06-30")] */
+interval_ended_by(d.attendance, f.employment)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ended_by/interval_ended_by.5.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ended_by/interval_ended_by.5.query.sqlpp
index 08f33a5..f4aae13 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ended_by/interval_ended_by.5.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ended_by/interval_ended_by.5.query.sqlpp
@@ -19,12 +19,16 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval ended_by because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-ended-by`(f.employment, d.attendance)
+where
+/*+ range [date("2003-06-30"), date("2005-12-31"), date("2008-06-30")] */
+interval_ended_by(f.employment, d.attendance)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ended_by/interval_ended_by.6.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ended_by/interval_ended_by.6.query.sqlpp
index bb4e8b2..bd4dc8d 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ended_by/interval_ended_by.6.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ended_by/interval_ended_by.6.query.sqlpp
@@ -19,12 +19,16 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval ended_by because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-ended-by`(d.attendance, f.employment)
+where
+/*+ range [date("2003-06-30"), date("2005-12-31"), date("2008-06-30")] */
+interval_ended_by(d.attendance, f.employment)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ended_by/interval_ended_by.7.query.sqlpp
similarity index 74%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ended_by/interval_ended_by.7.query.sqlpp
index a303827..5d0e86d 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ended_by/interval_ended_by.7.query.sqlpp
@@ -19,12 +19,16 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   9th January 2019
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval ended_by because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [datetime("2003-06-30T00:00:00.0"), datetime("2005-12-31T00:00:00.0"), datetime("2008-06-30T00:00:00.0")] */
+interval_ended_by(f.vacation, d.break)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ended_by/interval_ended_by.8.query.sqlpp
similarity index 74%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ended_by/interval_ended_by.8.query.sqlpp
index a303827..053535b 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ended_by/interval_ended_by.8.query.sqlpp
@@ -19,12 +19,16 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   9th January 2019
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval ended_by because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [datetime("2003-06-30T00:00:00.0"), datetime("2005-12-31T00:00:00.0"), datetime("2008-06-30T00:00:00.0")] */
+interval_ended_by(d.break, f.vacation)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ended_by/interval_ended_by.9.query.sqlpp
similarity index 74%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ended_by/interval_ended_by.9.query.sqlpp
index 39e3372..c7d21f2 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ended_by/interval_ended_by.9.query.sqlpp
@@ -19,12 +19,16 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval ended_by because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [datetime("2003-06-30T00:00:00.0"), datetime("2005-12-31T00:00:00.0"), datetime("2008-06-30T00:00:00.0")] */
+interval_ended_by(f.vacation, d.break)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ends/interval_ends.1.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ends/interval_ends.1.ddl.sqlpp
index fdef960..e3c2e76 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ends/interval_ends.1.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ends/interval_ends.1.ddl.sqlpp
@@ -19,7 +19,9 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval ends because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 drop dataverse TinyCollege if exists;
@@ -29,7 +31,9 @@ use TinyCollege;
 create type StaffType as open {
         name: string,
         office: string,
-        employment: interval
+        employment: interval,
+        vacation: interval,
+        office_hours: interval
 };
 create dataset Staff(StaffType)
 primary key name;
@@ -38,7 +42,9 @@ primary key name;
 create type StudentType as open {
         name: string,
         office: string,
-        attendance: interval
+        attendance: interval,
+        break: interval,
+        work_hours: interval
 };
 create dataset Students(StudentType)
 primary key name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ends/interval_ends.10.query.sqlpp
similarity index 74%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ends/interval_ends.10.query.sqlpp
index 39e3372..80f1641 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ends/interval_ends.10.query.sqlpp
@@ -19,12 +19,16 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval ends because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [datetime("2003-06-30T00:00:00.0"), datetime("2005-12-31T00:00:00.0"), datetime("2008-06-30T00:00:00.0")] */
+interval_ends(d.break, f.vacation)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ends/interval_ends.11.query.sqlpp
similarity index 75%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ends/interval_ends.11.query.sqlpp
index a303827..a12b527 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ends/interval_ends.11.query.sqlpp
@@ -19,12 +19,16 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   9th January 2019
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval ends because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [time("03:30:00.0+00:00"), time("05:59:00.0+00:00"), time("08:30:00.0+00:00")] */
+interval_ends(f.office_hours, d.work_hours)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ends/interval_ends.12.query.sqlpp
similarity index 75%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ends/interval_ends.12.query.sqlpp
index a303827..fd758e0 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ends/interval_ends.12.query.sqlpp
@@ -19,12 +19,16 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   9th January 2019
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval ends because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [time("03:30:00.0+00:00"), time("05:59:00.0+00:00"), time("08:30:00.0+00:00")] */
+interval_ends(d.work_hours, f.office_hours)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ends/interval_ends.13.query.sqlpp
similarity index 75%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ends/interval_ends.13.query.sqlpp
index 39e3372..0f8a057 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ends/interval_ends.13.query.sqlpp
@@ -19,12 +19,16 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval ends because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [time("03:30:00.0+00:00"), time("05:59:00.0+00:00"), time("08:30:00.0+00:00")] */
+interval_ends(f.office_hours, d.work_hours)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ends/interval_ends.14.query.sqlpp
similarity index 75%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ends/interval_ends.14.query.sqlpp
index 39e3372..010c04e 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ends/interval_ends.14.query.sqlpp
@@ -19,12 +19,16 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval ends because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [time("03:30:00.0+00:00"), time("05:59:00.0+00:00"), time("08:30:00.0+00:00")] */
+interval_ends(d.work_hours, f.office_hours)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ends/interval_ends.2.update.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ends/interval_ends.2.update.sqlpp
index 4334476..881d227 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ends/interval_ends.2.update.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ends/interval_ends.2.update.sqlpp
@@ -19,7 +19,9 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval ends because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ends/interval_ends.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ends/interval_ends.3.query.sqlpp
index 50ae865..42e9380 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ends/interval_ends.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ends/interval_ends.3.query.sqlpp
@@ -19,12 +19,16 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval ends because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-ends`(f.employment, d.attendance)
+where
+/*+ range [date("2003-06-30"), date("2005-12-31"), date("2008-06-30")] */
+interval_ends(f.employment, d.attendance)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ends/interval_ends.4.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ends/interval_ends.4.query.sqlpp
index 86d9ff4..7ad2449 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ends/interval_ends.4.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ends/interval_ends.4.query.sqlpp
@@ -19,12 +19,16 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval ends because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-ends`(d.attendance, f.employment)
+where
+/*+ range [date("2003-06-30"), date("2005-12-31"), date("2008-06-30")] */
+interval_ends(d.attendance, f.employment)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ends/interval_ends.5.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ends/interval_ends.5.query.sqlpp
index cf316a3..6751fc1 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ends/interval_ends.5.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ends/interval_ends.5.query.sqlpp
@@ -19,12 +19,16 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval ends because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-ends`(f.employment, d.attendance)
+where
+/*+ range [date("2003-06-30"), date("2005-12-31"), date("2008-06-30")] */
+interval_ends(f.employment, d.attendance)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ends/interval_ends.6.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ends/interval_ends.6.query.sqlpp
index c9faeda..61856be 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ends/interval_ends.6.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ends/interval_ends.6.query.sqlpp
@@ -19,12 +19,16 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval ends because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-ends`(d.attendance, f.employment)
+where
+/*+ range [date("2003-06-30"), date("2005-12-31"), date("2008-06-30")] */
+interval_ends(d.attendance, f.employment)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ends/interval_ends.7.query.sqlpp
similarity index 74%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ends/interval_ends.7.query.sqlpp
index a303827..7b05616 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ends/interval_ends.7.query.sqlpp
@@ -19,12 +19,16 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   9th January 2019
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval ends because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [datetime("2003-06-30T00:00:00.0"), datetime("2005-12-31T00:00:00.0"), datetime("2008-06-30T00:00:00.0")] */
+interval_ends(f.vacation, d.break)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ends/interval_ends.8.query.sqlpp
similarity index 74%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ends/interval_ends.8.query.sqlpp
index a303827..a0d6a58 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ends/interval_ends.8.query.sqlpp
@@ -19,12 +19,16 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   9th January 2019
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval ends because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [datetime("2003-06-30T00:00:00.0"), datetime("2005-12-31T00:00:00.0"), datetime("2008-06-30T00:00:00.0")] */
+interval_ends(d.break, f.vacation)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ends/interval_ends.9.query.sqlpp
similarity index 74%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ends/interval_ends.9.query.sqlpp
index 39e3372..e1b5aa0 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_ends/interval_ends.9.query.sqlpp
@@ -19,12 +19,16 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval ends because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [datetime("2003-06-30T00:00:00.0"), datetime("2005-12-31T00:00:00.0"), datetime("2008-06-30T00:00:00.0")] */
+interval_ends(f.vacation, d.break)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_meets/interval_meets.1.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_meets/interval_meets.1.ddl.sqlpp
index fdef960..107e651 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_meets/interval_meets.1.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_meets/interval_meets.1.ddl.sqlpp
@@ -19,7 +19,9 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval meets because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 drop dataverse TinyCollege if exists;
@@ -29,7 +31,9 @@ use TinyCollege;
 create type StaffType as open {
         name: string,
         office: string,
-        employment: interval
+        employment: interval,
+        vacation: interval,
+        office_hours: interval
 };
 create dataset Staff(StaffType)
 primary key name;
@@ -38,7 +42,9 @@ primary key name;
 create type StudentType as open {
         name: string,
         office: string,
-        attendance: interval
+        attendance: interval,
+        break: interval,
+        work_hours: interval
 };
 create dataset Students(StudentType)
 primary key name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_meets/interval_meets.10.query.sqlpp
similarity index 74%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_meets/interval_meets.10.query.sqlpp
index 39e3372..2998ed3 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_meets/interval_meets.10.query.sqlpp
@@ -19,12 +19,16 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval meets because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [datetime("2003-06-30T00:00:00.0"), datetime("2005-12-31T00:00:00.0"), datetime("2008-06-30T00:00:00.0")] */
+interval_meets(d.break, f.vacation)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_meets/interval_meets.11.query.sqlpp
similarity index 75%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_meets/interval_meets.11.query.sqlpp
index a303827..31d89ba 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_meets/interval_meets.11.query.sqlpp
@@ -19,12 +19,16 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   9th January 2019
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval meets because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [time("03:30:00.0+00:00"), time("05:59:00.0+00:00"), time("08:30:00.0+00:00")] */
+interval_meets(f.office_hours, d.work_hours)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_meets/interval_meets.12.query.sqlpp
similarity index 75%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_meets/interval_meets.12.query.sqlpp
index a303827..b79583f 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_meets/interval_meets.12.query.sqlpp
@@ -19,12 +19,16 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   9th January 2019
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval meets because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [time("03:30:00.0+00:00"), time("05:59:00.0+00:00"), time("08:30:00.0+00:00")] */
+interval_meets(d.work_hours, f.office_hours)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_meets/interval_meets.13.query.sqlpp
similarity index 75%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_meets/interval_meets.13.query.sqlpp
index 39e3372..1f1083b 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_meets/interval_meets.13.query.sqlpp
@@ -19,12 +19,16 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval meets because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [time("03:30:00.0+00:00"), time("05:59:00.0+00:00"), time("08:30:00.0+00:00")] */
+interval_meets(f.office_hours, d.work_hours)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_meets/interval_meets.14.query.sqlpp
similarity index 75%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_meets/interval_meets.14.query.sqlpp
index 39e3372..8d8ad81 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_meets/interval_meets.14.query.sqlpp
@@ -19,12 +19,16 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval meets because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [time("03:30:00.0+00:00"), time("05:59:00.0+00:00"), time("08:30:00.0+00:00")] */
+interval_meets(d.work_hours, f.office_hours)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_meets/interval_meets.2.update.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_meets/interval_meets.2.update.sqlpp
index 4334476..95937ec 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_meets/interval_meets.2.update.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_meets/interval_meets.2.update.sqlpp
@@ -19,7 +19,9 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval meets because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_meets/interval_meets.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_meets/interval_meets.3.query.sqlpp
index 244cd62..80dd09c 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_meets/interval_meets.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_meets/interval_meets.3.query.sqlpp
@@ -19,12 +19,16 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval meets because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-meets`(f.employment, d.attendance)
+where
+/*+ range [date("2003-06-30"), date("2005-12-31"), date("2008-06-30")] */
+interval_meets(f.employment, d.attendance)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_meets/interval_meets.4.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_meets/interval_meets.4.query.sqlpp
index ac9dd33..24dc50f 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_meets/interval_meets.4.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_meets/interval_meets.4.query.sqlpp
@@ -19,12 +19,16 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval meets because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-meets`(d.attendance, f.employment)
+where
+/*+ range [date("2003-06-30"), date("2005-12-31"), date("2008-06-30")] */
+interval_meets(d.attendance, f.employment)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_meets/interval_meets.5.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_meets/interval_meets.5.query.sqlpp
index 8fd6a60..5c06894 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_meets/interval_meets.5.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_meets/interval_meets.5.query.sqlpp
@@ -19,12 +19,16 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval meets because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-meets`(f.employment, d.attendance)
+where
+/*+ range [date("2003-06-30"), date("2005-12-31"), date("2008-06-30")] */
+interval_meets(f.employment, d.attendance)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_meets/interval_meets.6.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_meets/interval_meets.6.query.sqlpp
index 34c9a12..f438e6a 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_meets/interval_meets.6.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_meets/interval_meets.6.query.sqlpp
@@ -19,12 +19,16 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval meets because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-meets`(d.attendance, f.employment)
+where
+/*+ range [date("2003-06-30"), date("2005-12-31"), date("2008-06-30")] */
+interval_meets(d.attendance, f.employment)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_meets/interval_meets.7.query.sqlpp
similarity index 74%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_meets/interval_meets.7.query.sqlpp
index a303827..b2723f0 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_meets/interval_meets.7.query.sqlpp
@@ -19,12 +19,16 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   9th January 2019
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval meets because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [datetime("2003-06-30T00:00:00.0"), datetime("2005-12-31T00:00:00.0"), datetime("2008-06-30T00:00:00.0")] */
+interval_meets(f.vacation, d.break)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_meets/interval_meets.8.query.sqlpp
similarity index 74%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_meets/interval_meets.8.query.sqlpp
index a303827..6a99fbe 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_meets/interval_meets.8.query.sqlpp
@@ -19,12 +19,16 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   9th January 2019
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval meets because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [datetime("2003-06-30T00:00:00.0"), datetime("2005-12-31T00:00:00.0"), datetime("2008-06-30T00:00:00.0")] */
+interval_meets(d.break, f.vacation)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_meets/interval_meets.9.query.sqlpp
similarity index 74%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_meets/interval_meets.9.query.sqlpp
index 39e3372..53f6a41 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_meets/interval_meets.9.query.sqlpp
@@ -19,12 +19,16 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval meets because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [datetime("2003-06-30T00:00:00.0"), datetime("2005-12-31T00:00:00.0"), datetime("2008-06-30T00:00:00.0")] */
+interval_meets(f.vacation, d.break)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_met_by/interval_met_by.1.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_met_by/interval_met_by.1.ddl.sqlpp
index fdef960..2d76f34 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_met_by/interval_met_by.1.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_met_by/interval_met_by.1.ddl.sqlpp
@@ -19,7 +19,9 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval met_by because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 drop dataverse TinyCollege if exists;
@@ -29,7 +31,9 @@ use TinyCollege;
 create type StaffType as open {
         name: string,
         office: string,
-        employment: interval
+        employment: interval,
+        vacation: interval,
+        office_hours: interval
 };
 create dataset Staff(StaffType)
 primary key name;
@@ -38,7 +42,9 @@ primary key name;
 create type StudentType as open {
         name: string,
         office: string,
-        attendance: interval
+        attendance: interval,
+        break: interval,
+        work_hours: interval
 };
 create dataset Students(StudentType)
 primary key name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_met_by/interval_met_by.10.query.sqlpp
similarity index 74%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_met_by/interval_met_by.10.query.sqlpp
index 39e3372..9b0113a 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_met_by/interval_met_by.10.query.sqlpp
@@ -19,12 +19,16 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval met_by because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [datetime("2003-06-30T00:00:00.0"), datetime("2005-12-31T00:00:00.0"), datetime("2008-06-30T00:00:00.0")] */
+interval_met_by(d.break, f.vacation)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_met_by/interval_met_by.11.query.sqlpp
similarity index 75%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_met_by/interval_met_by.11.query.sqlpp
index a303827..d2aa20b 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_met_by/interval_met_by.11.query.sqlpp
@@ -19,12 +19,16 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   9th January 2019
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval met_by because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [time("03:30:00.0+00:00"), time("05:59:00.0+00:00"), time("08:30:00.0+00:00")] */
+interval_met_by(f.office_hours, d.work_hours)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_met_by/interval_met_by.12.query.sqlpp
similarity index 75%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_met_by/interval_met_by.12.query.sqlpp
index a303827..c8156dc 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_met_by/interval_met_by.12.query.sqlpp
@@ -19,12 +19,16 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   9th January 2019
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval met_by because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [time("03:30:00.0+00:00"), time("05:59:00.0+00:00"), time("08:30:00.0+00:00")] */
+interval_met_by(d.work_hours, f.office_hours)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_met_by/interval_met_by.13.query.sqlpp
similarity index 75%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_met_by/interval_met_by.13.query.sqlpp
index 39e3372..2d18ea3 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_met_by/interval_met_by.13.query.sqlpp
@@ -19,12 +19,16 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval met_by because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [time("03:30:00.0+00:00"), time("05:59:00.0+00:00"), time("08:30:00.0+00:00")] */
+interval_met_by(f.office_hours, d.work_hours)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_met_by/interval_met_by.14.query.sqlpp
similarity index 75%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_met_by/interval_met_by.14.query.sqlpp
index 39e3372..7105983 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_met_by/interval_met_by.14.query.sqlpp
@@ -19,12 +19,16 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval met_by because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [time("03:30:00.0+00:00"), time("05:59:00.0+00:00"), time("08:30:00.0+00:00")] */
+interval_met_by(d.work_hours, f.office_hours)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_met_by/interval_met_by.2.update.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_met_by/interval_met_by.2.update.sqlpp
index 4334476..c260fec 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_met_by/interval_met_by.2.update.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_met_by/interval_met_by.2.update.sqlpp
@@ -19,7 +19,9 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval met_by because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_met_by/interval_met_by.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_met_by/interval_met_by.3.query.sqlpp
index f1f39a9..0aaf497 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_met_by/interval_met_by.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_met_by/interval_met_by.3.query.sqlpp
@@ -19,12 +19,16 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval met_by because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-met-by`(f.employment, d.attendance)
+where
+/*+ range [date("2003-06-30"), date("2005-12-31"), date("2008-06-30")] */
+interval_met_by(f.employment, d.attendance)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_met_by/interval_met_by.4.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_met_by/interval_met_by.4.query.sqlpp
index fa2e9ed..57aa56f 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_met_by/interval_met_by.4.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_met_by/interval_met_by.4.query.sqlpp
@@ -19,12 +19,16 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval met_by because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-met-by`(d.attendance, f.employment)
+where
+/*+ range [date("2003-06-30"), date("2005-12-31"), date("2008-06-30")] */
+interval_met_by(d.attendance, f.employment)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_met_by/interval_met_by.5.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_met_by/interval_met_by.5.query.sqlpp
index 2755407..1bff1e6 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_met_by/interval_met_by.5.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_met_by/interval_met_by.5.query.sqlpp
@@ -19,12 +19,16 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval met_by because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-met-by`(f.employment, d.attendance)
+where
+/*+ range [date("2003-06-30"), date("2005-12-31"), date("2008-06-30")] */
+interval_met_by(f.employment, d.attendance)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_met_by/interval_met_by.6.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_met_by/interval_met_by.6.query.sqlpp
index 319cb32..a601324 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_met_by/interval_met_by.6.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_met_by/interval_met_by.6.query.sqlpp
@@ -19,12 +19,16 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval met_by because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-met-by`(d.attendance, f.employment)
+where
+/*+ range [date("2003-06-30"), date("2005-12-31"), date("2008-06-30")] */
+interval_met_by(d.attendance, f.employment)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_met_by/interval_met_by.7.query.sqlpp
similarity index 74%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_met_by/interval_met_by.7.query.sqlpp
index a303827..fdf140c 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_met_by/interval_met_by.7.query.sqlpp
@@ -19,12 +19,16 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   9th January 2019
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval met_by because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [datetime("2003-06-30T00:00:00.0"), datetime("2005-12-31T00:00:00.0"), datetime("2008-06-30T00:00:00.0")] */
+interval_met_by(f.vacation, d.break)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_met_by/interval_met_by.8.query.sqlpp
similarity index 74%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_met_by/interval_met_by.8.query.sqlpp
index a303827..9929fe8 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_met_by/interval_met_by.8.query.sqlpp
@@ -19,12 +19,16 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   9th January 2019
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval met_by because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [datetime("2003-06-30T00:00:00.0"), datetime("2005-12-31T00:00:00.0"), datetime("2008-06-30T00:00:00.0")] */
+interval_met_by(d.break, f.vacation)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_met_by/interval_met_by.9.query.sqlpp
similarity index 74%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_met_by/interval_met_by.9.query.sqlpp
index 39e3372..5a0a9da 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_met_by/interval_met_by.9.query.sqlpp
@@ -19,12 +19,16 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval met_by because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [datetime("2003-06-30T00:00:00.0"), datetime("2005-12-31T00:00:00.0"), datetime("2008-06-30T00:00:00.0")] */
+interval_met_by(f.vacation, d.break)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.1.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.1.ddl.sqlpp
index fdef960..ae840c3 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.1.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.1.ddl.sqlpp
@@ -19,7 +19,7 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 drop dataverse TinyCollege if exists;
@@ -29,7 +29,9 @@ use TinyCollege;
 create type StaffType as open {
         name: string,
         office: string,
-        employment: interval
+        employment: interval,
+        vacation: interval,
+        office_hours: interval
 };
 create dataset Staff(StaffType)
 primary key name;
@@ -38,7 +40,9 @@ primary key name;
 create type StudentType as open {
         name: string,
         office: string,
-        attendance: interval
+        attendance: interval,
+        break: interval,
+        work_hours: interval
 };
 create dataset Students(StudentType)
 primary key name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.10.query.sqlpp
similarity index 83%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.10.query.sqlpp
index 39e3372..75bd6de 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.10.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [datetime("2003-06-30T00:00:00.0"), datetime("2005-12-31T00:00:00.0"), datetime("2008-06-30T00:00:00.0")] */
+interval_overlapped_by(d.break, f.vacation)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.11.query.sqlpp
similarity index 84%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.11.query.sqlpp
index 4644367..0d78bf9 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.11.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-before`(f.employment, d.attendance)
+where
+/*+ range [time("03:30:00.0+00:00"), time("05:59:00.0+00:00"), time("08:30:00.0+00:00")] */
+interval_overlapped_by(f.office_hours, d.work_hours)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.12.query.sqlpp
similarity index 84%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.12.query.sqlpp
index 4644367..4b0761b 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.12.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-before`(f.employment, d.attendance)
+where
+/*+ range [time("03:30:00.0+00:00"), time("05:59:00.0+00:00"), time("08:30:00.0+00:00")] */
+interval_overlapped_by(d.work_hours, f.office_hours)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.13.query.sqlpp
similarity index 84%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.13.query.sqlpp
index 39e3372..e8bfd5c 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.13.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [time("03:30:00.0+00:00"), time("05:59:00.0+00:00"), time("08:30:00.0+00:00")] */
+interval_overlapped_by(f.office_hours, d.work_hours)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.14.query.sqlpp
similarity index 84%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.14.query.sqlpp
index 39e3372..6e95625 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.14.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [time("03:30:00.0+00:00"), time("05:59:00.0+00:00"), time("08:30:00.0+00:00")] */
+interval_overlapped_by(d.work_hours, f.office_hours)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.2.update.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.2.update.sqlpp
index 4334476..b7cd541 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.2.update.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.2.update.sqlpp
@@ -19,7 +19,7 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.3.query.sqlpp
index 2fc8575..9033c40 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.3.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-overlapped-by`(f.employment, d.attendance)
+where
+/*+ range [date("2003-06-30"), date("2005-12-31"), date("2008-06-30")] */
+interval_overlapped_by(f.employment, d.attendance)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.4.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.4.query.sqlpp
index 1f80cd0..5389119 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.4.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.4.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-overlapped-by`(d.attendance, f.employment)
+where
+/*+ range [date("2003-06-30"), date("2005-12-31"), date("2008-06-30")] */
+interval_overlapped_by(d.attendance, f.employment)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.5.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.5.query.sqlpp
index e32af46..1ff426f 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.5.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.5.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-overlapped-by`(f.employment, d.attendance)
+where
+/*+ range [date("2003-06-30"), date("2005-12-31"), date("2008-06-30")] */
+interval_overlapped_by(f.employment, d.attendance)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.6.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.6.query.sqlpp
index c8b77f3..422ce76 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.6.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.6.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-overlapped-by`(d.attendance, f.employment)
+where
+/*+ range [date("2003-06-30"), date("2005-12-31"), date("2008-06-30")] */
+interval_overlapped_by(d.attendance, f.employment)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.7.query.sqlpp
similarity index 83%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.7.query.sqlpp
index 4644367..89f8a60 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.7.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-before`(f.employment, d.attendance)
+where
+/*+ range [datetime("2003-06-30T00:00:00.0"), datetime("2005-12-31T00:00:00.0"), datetime("2008-06-30T00:00:00.0")] */
+interval_overlapped_by(f.vacation, d.break)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.8.query.sqlpp
similarity index 83%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.8.query.sqlpp
index 4644367..02845b5 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.8.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-before`(f.employment, d.attendance)
+where
+/*+ range [datetime("2003-06-30T00:00:00.0"), datetime("2005-12-31T00:00:00.0"), datetime("2008-06-30T00:00:00.0")] */
+interval_overlapped_by(d.break, f.vacation)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.9.query.sqlpp
similarity index 83%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.9.query.sqlpp
index 39e3372..08d2c04 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.9.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [datetime("2003-06-30T00:00:00.0"), datetime("2005-12-31T00:00:00.0"), datetime("2008-06-30T00:00:00.0")] */
+interval_overlapped_by(f.vacation, d.break)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapping/interval_overlapping.1.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapping/interval_overlapping.1.ddl.sqlpp
index fdef960..ae840c3 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapping/interval_overlapping.1.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapping/interval_overlapping.1.ddl.sqlpp
@@ -19,7 +19,7 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 drop dataverse TinyCollege if exists;
@@ -29,7 +29,9 @@ use TinyCollege;
 create type StaffType as open {
         name: string,
         office: string,
-        employment: interval
+        employment: interval,
+        vacation: interval,
+        office_hours: interval
 };
 create dataset Staff(StaffType)
 primary key name;
@@ -38,7 +40,9 @@ primary key name;
 create type StudentType as open {
         name: string,
         office: string,
-        attendance: interval
+        attendance: interval,
+        break: interval,
+        work_hours: interval
 };
 create dataset Students(StudentType)
 primary key name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapping/interval_overlapping.10.query.sqlpp
similarity index 83%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapping/interval_overlapping.10.query.sqlpp
index 39e3372..e1ce7ce 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapping/interval_overlapping.10.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [datetime("2003-06-30T00:00:00.0"), datetime("2005-12-31T00:00:00.0"), datetime("2008-06-30T00:00:00.0")] */
+interval_overlapping(d.break, f.vacation)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapping/interval_overlapping.11.query.sqlpp
similarity index 84%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapping/interval_overlapping.11.query.sqlpp
index 4644367..e30bf20 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapping/interval_overlapping.11.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-before`(f.employment, d.attendance)
+where
+/*+ range [time("03:30:00.0+00:00"), time("05:59:00.0+00:00"), time("08:30:00.0+00:00")] */
+interval_overlapping(f.office_hours, d.work_hours)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapping/interval_overlapping.12.query.sqlpp
similarity index 84%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapping/interval_overlapping.12.query.sqlpp
index 4644367..a994ebf 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapping/interval_overlapping.12.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-before`(f.employment, d.attendance)
+where
+/*+ range [time("03:30:00.0+00:00"), time("05:59:00.0+00:00"), time("08:30:00.0+00:00")] */
+interval_overlapping(d.work_hours, f.office_hours)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapping/interval_overlapping.13.query.sqlpp
similarity index 84%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapping/interval_overlapping.13.query.sqlpp
index 39e3372..0e30efb 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapping/interval_overlapping.13.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [time("03:30:00.0+00:00"), time("05:59:00.0+00:00"), time("08:30:00.0+00:00")] */
+interval_overlapping(f.office_hours, d.work_hours)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapping/interval_overlapping.14.query.sqlpp
similarity index 84%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapping/interval_overlapping.14.query.sqlpp
index 39e3372..bcd2606 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapping/interval_overlapping.14.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [time("03:30:00.0+00:00"), time("05:59:00.0+00:00"), time("08:30:00.0+00:00")] */
+interval_overlapping(d.work_hours, f.office_hours)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapping/interval_overlapping.2.update.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapping/interval_overlapping.2.update.sqlpp
index 4334476..b7cd541 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapping/interval_overlapping.2.update.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapping/interval_overlapping.2.update.sqlpp
@@ -19,7 +19,7 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapping/interval_overlapping.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapping/interval_overlapping.3.query.sqlpp
index 91589f2..ddcae39 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapping/interval_overlapping.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapping/interval_overlapping.3.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-overlapping`(f.employment, d.attendance)
+where
+/*+ range [date("2003-06-30"), date("2005-12-31"), date("2008-06-30")] */
+interval_overlapping(f.employment, d.attendance)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapping/interval_overlapping.4.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapping/interval_overlapping.4.query.sqlpp
index 12b5daf..e7f62d4 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapping/interval_overlapping.4.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapping/interval_overlapping.4.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-overlapping`(d.attendance, f.employment)
+where
+/*+ range [date("2003-06-30"), date("2005-12-31"), date("2008-06-30")] */
+interval_overlapping(d.attendance, f.employment)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapping/interval_overlapping.5.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapping/interval_overlapping.5.query.sqlpp
index b0f4423..eaba9a5 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapping/interval_overlapping.5.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapping/interval_overlapping.5.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-overlapping`(f.employment, d.attendance)
+where
+/*+ range [date("2003-06-30"), date("2005-12-31"), date("2008-06-30")] */
+interval_overlapping(f.employment, d.attendance)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapping/interval_overlapping.6.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapping/interval_overlapping.6.query.sqlpp
index 94a690e..5e601e0 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapping/interval_overlapping.6.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapping/interval_overlapping.6.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-overlapping`(d.attendance, f.employment)
+where
+/*+ range [date("2003-06-30"), date("2005-12-31"), date("2008-06-30")] */
+interval_overlapping(d.attendance, f.employment)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapping/interval_overlapping.7.query.sqlpp
similarity index 83%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapping/interval_overlapping.7.query.sqlpp
index 4644367..ba64ef0 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapping/interval_overlapping.7.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-before`(f.employment, d.attendance)
+where
+/*+ range [datetime("2003-06-30T00:00:00.0"), datetime("2005-12-31T00:00:00.0"), datetime("2008-06-30T00:00:00.0")] */
+interval_overlapping(f.vacation, d.break)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapping/interval_overlapping.8.query.sqlpp
similarity index 83%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapping/interval_overlapping.8.query.sqlpp
index 4644367..3656661 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapping/interval_overlapping.8.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-before`(f.employment, d.attendance)
+where
+/*+ range [datetime("2003-06-30T00:00:00.0"), datetime("2005-12-31T00:00:00.0"), datetime("2008-06-30T00:00:00.0")] */
+interval_overlapping(d.break, f.vacation)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapping/interval_overlapping.9.query.sqlpp
similarity index 83%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapping/interval_overlapping.9.query.sqlpp
index 39e3372..84b6252 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlapping/interval_overlapping.9.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [datetime("2003-06-30T00:00:00.0"), datetime("2005-12-31T00:00:00.0"), datetime("2008-06-30T00:00:00.0")] */
+interval_overlapping(f.vacation, d.break)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlaps/interval_overlaps.1.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlaps/interval_overlaps.1.ddl.sqlpp
index fdef960..ae840c3 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlaps/interval_overlaps.1.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlaps/interval_overlaps.1.ddl.sqlpp
@@ -19,7 +19,7 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 drop dataverse TinyCollege if exists;
@@ -29,7 +29,9 @@ use TinyCollege;
 create type StaffType as open {
         name: string,
         office: string,
-        employment: interval
+        employment: interval,
+        vacation: interval,
+        office_hours: interval
 };
 create dataset Staff(StaffType)
 primary key name;
@@ -38,7 +40,9 @@ primary key name;
 create type StudentType as open {
         name: string,
         office: string,
-        attendance: interval
+        attendance: interval,
+        break: interval,
+        work_hours: interval
 };
 create dataset Students(StudentType)
 primary key name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlaps/interval_overlaps.10.query.sqlpp
similarity index 83%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlaps/interval_overlaps.10.query.sqlpp
index 39e3372..bd7fc86 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlaps/interval_overlaps.10.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [datetime("2003-06-30T00:00:00.0"), datetime("2005-12-31T00:00:00.0"), datetime("2008-06-30T00:00:00.0")] */
+interval_overlaps(d.break, f.vacation)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlaps/interval_overlaps.11.query.sqlpp
similarity index 85%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlaps/interval_overlaps.11.query.sqlpp
index 4644367..dc51559 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlaps/interval_overlaps.11.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-before`(f.employment, d.attendance)
+where
+/*+ range [time("03:30:00.0+00:00"), time("05:59:00.0+00:00"), time("08:30:00.0+00:00")] */
+interval_overlaps(f.office_hours, d.work_hours)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlaps/interval_overlaps.12.query.sqlpp
similarity index 85%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlaps/interval_overlaps.12.query.sqlpp
index 4644367..50e1fbb 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlaps/interval_overlaps.12.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-before`(f.employment, d.attendance)
+where
+/*+ range [time("03:30:00.0+00:00"), time("05:59:00.0+00:00"), time("08:30:00.0+00:00")] */
+interval_overlaps(d.work_hours, f.office_hours)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlaps/interval_overlaps.13.query.sqlpp
similarity index 85%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlaps/interval_overlaps.13.query.sqlpp
index 39e3372..bd750f4 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlaps/interval_overlaps.13.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [time("03:30:00.0+00:00"), time("05:59:00.0+00:00"), time("08:30:00.0+00:00")] */
+interval_overlaps(f.office_hours, d.work_hours)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlaps/interval_overlaps.14.query.sqlpp
similarity index 85%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlaps/interval_overlaps.14.query.sqlpp
index 39e3372..91f42a1 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlaps/interval_overlaps.14.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [time("03:30:00.0+00:00"), time("05:59:00.0+00:00"), time("08:30:00.0+00:00")] */
+interval_overlaps(d.work_hours, f.office_hours)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlaps/interval_overlaps.2.update.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlaps/interval_overlaps.2.update.sqlpp
index 4334476..b7cd541 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlaps/interval_overlaps.2.update.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlaps/interval_overlaps.2.update.sqlpp
@@ -19,7 +19,7 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlaps/interval_overlaps.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlaps/interval_overlaps.3.query.sqlpp
index 579eda5..717f7e6 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlaps/interval_overlaps.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlaps/interval_overlaps.3.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-overlaps`(f.employment, d.attendance)
+where
+/*+ range [date("2003-06-30"), date("2005-12-31"), date("2008-06-30")] */
+interval_overlaps(f.employment, d.attendance)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlaps/interval_overlaps.4.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlaps/interval_overlaps.4.query.sqlpp
index 1327d67..bdb8ec4 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlaps/interval_overlaps.4.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlaps/interval_overlaps.4.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-overlaps`(d.attendance, f.employment)
+where
+/*+ range [date("2003-06-30"), date("2005-12-31"), date("2008-06-30")] */
+interval_overlaps(d.attendance, f.employment)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlaps/interval_overlaps.5.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlaps/interval_overlaps.5.query.sqlpp
index ac40622..f5bbac4 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlaps/interval_overlaps.5.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlaps/interval_overlaps.5.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-overlaps`(f.employment, d.attendance)
+where
+/*+ range [date("2003-06-30"), date("2005-12-31"), date("2008-06-30")] */
+interval_overlaps(f.employment, d.attendance)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlaps/interval_overlaps.6.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlaps/interval_overlaps.6.query.sqlpp
index 65f43c5..03d8da5 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlaps/interval_overlaps.6.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlaps/interval_overlaps.6.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-overlaps`(d.attendance, f.employment)
+where
+/*+ range [date("2003-06-30"), date("2005-12-31"), date("2008-06-30")] */
+interval_overlaps(d.attendance, f.employment)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlaps/interval_overlaps.7.query.sqlpp
similarity index 83%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlaps/interval_overlaps.7.query.sqlpp
index 4644367..c4ff119 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlaps/interval_overlaps.7.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-before`(f.employment, d.attendance)
+where
+/*+ range [datetime("2003-06-30T00:00:00.0"), datetime("2005-12-31T00:00:00.0"), datetime("2008-06-30T00:00:00.0")] */
+interval_overlaps(f.vacation, d.break)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlaps/interval_overlaps.8.query.sqlpp
similarity index 83%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlaps/interval_overlaps.8.query.sqlpp
index 4644367..8e4eca8 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlaps/interval_overlaps.8.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-before`(f.employment, d.attendance)
+where
+/*+ range [datetime("2003-06-30T00:00:00.0"), datetime("2005-12-31T00:00:00.0"), datetime("2008-06-30T00:00:00.0")] */
+interval_overlaps(d.break, f.vacation)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlaps/interval_overlaps.9.query.sqlpp
similarity index 83%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlaps/interval_overlaps.9.query.sqlpp
index 39e3372..4de8f1c 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_overlaps/interval_overlaps.9.query.sqlpp
@@ -19,12 +19,14 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [datetime("2003-06-30T00:00:00.0"), datetime("2005-12-31T00:00:00.0"), datetime("2008-06-30T00:00:00.0")] */
+interval_overlaps(f.vacation, d.break)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_started_by/interval_started_by.1.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_started_by/interval_started_by.1.ddl.sqlpp
index fdef960..5fcd96e 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_started_by/interval_started_by.1.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_started_by/interval_started_by.1.ddl.sqlpp
@@ -19,7 +19,9 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval started_by because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 drop dataverse TinyCollege if exists;
@@ -29,7 +31,9 @@ use TinyCollege;
 create type StaffType as open {
         name: string,
         office: string,
-        employment: interval
+        employment: interval,
+        vacation: interval,
+        office_hours: interval
 };
 create dataset Staff(StaffType)
 primary key name;
@@ -38,7 +42,9 @@ primary key name;
 create type StudentType as open {
         name: string,
         office: string,
-        attendance: interval
+        attendance: interval,
+        break: interval,
+        work_hours: interval
 };
 create dataset Students(StudentType)
 primary key name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_started_by/interval_started_by.10.query.sqlpp
similarity index 74%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_started_by/interval_started_by.10.query.sqlpp
index 39e3372..319efac 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_started_by/interval_started_by.10.query.sqlpp
@@ -19,12 +19,16 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval started_by because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [datetime("2003-06-30T00:00:00.0"), datetime("2005-12-31T00:00:00.0"), datetime("2008-06-30T00:00:00.0")] */
+interval_started_by(d.break, f.vacation)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_started_by/interval_started_by.11.query.sqlpp
similarity index 74%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_started_by/interval_started_by.11.query.sqlpp
index a303827..d39164d 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_started_by/interval_started_by.11.query.sqlpp
@@ -19,12 +19,16 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   9th January 2019
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval started_by because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [time("03:30:00.0+00:00"), time("05:59:00.0+00:00"), time("08:30:00.0+00:00")] */
+interval_started_by(f.office_hours, d.work_hours)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_started_by/interval_started_by.12.query.sqlpp
similarity index 74%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_started_by/interval_started_by.12.query.sqlpp
index a303827..70efc7b 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_started_by/interval_started_by.12.query.sqlpp
@@ -19,12 +19,16 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   9th January 2019
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval started_by because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [time("03:30:00.0+00:00"), time("05:59:00.0+00:00"), time("08:30:00.0+00:00")] */
+interval_started_by(d.work_hours, f.office_hours)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_started_by/interval_started_by.13.query.sqlpp
similarity index 74%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_started_by/interval_started_by.13.query.sqlpp
index 39e3372..c6b20ed 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_started_by/interval_started_by.13.query.sqlpp
@@ -19,12 +19,16 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval started_by because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [time("03:30:00.0+00:00"), time("05:59:00.0+00:00"), time("08:30:00.0+00:00")] */
+interval_started_by(f.office_hours, d.work_hours)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_started_by/interval_started_by.14.query.sqlpp
similarity index 74%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_started_by/interval_started_by.14.query.sqlpp
index 39e3372..76dd651 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_started_by/interval_started_by.14.query.sqlpp
@@ -19,12 +19,16 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval started_by because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [time("03:30:00.0+00:00"), time("05:59:00.0+00:00"), time("08:30:00.0+00:00")] */
+interval_started_by(d.work_hours, f.office_hours)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_started_by/interval_started_by.2.update.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_started_by/interval_started_by.2.update.sqlpp
index 4334476..5fbdf7d 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_started_by/interval_started_by.2.update.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_started_by/interval_started_by.2.update.sqlpp
@@ -19,7 +19,9 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval started_by because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_started_by/interval_started_by.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_started_by/interval_started_by.3.query.sqlpp
index ca93d0e..f3f805d 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_started_by/interval_started_by.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_started_by/interval_started_by.3.query.sqlpp
@@ -19,12 +19,16 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval started_by because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-started-by`(f.employment, d.attendance)
+where
+/*+ range [date("2003-06-30"), date("2005-12-31"), date("2008-06-30")] */
+interval_started_by(f.employment, d.attendance)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_started_by/interval_started_by.4.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_started_by/interval_started_by.4.query.sqlpp
index 5c5ae25..af5b059 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_started_by/interval_started_by.4.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_started_by/interval_started_by.4.query.sqlpp
@@ -19,12 +19,16 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval started_by because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-started-by`(d.attendance, f.employment)
+where
+/*+ range [date("2003-06-30"), date("2005-12-31"), date("2008-06-30")] */
+interval_started_by(d.attendance, f.employment)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_started_by/interval_started_by.5.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_started_by/interval_started_by.5.query.sqlpp
index 91436cc..e414153 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_started_by/interval_started_by.5.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_started_by/interval_started_by.5.query.sqlpp
@@ -19,12 +19,16 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval started_by because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-started-by`(f.employment, d.attendance)
+where
+/*+ range [date("2003-06-30"), date("2005-12-31"), date("2008-06-30")] */
+interval_started_by(f.employment, d.attendance)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_started_by/interval_started_by.6.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_started_by/interval_started_by.6.query.sqlpp
index d3ea093..3867b87 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_started_by/interval_started_by.6.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_started_by/interval_started_by.6.query.sqlpp
@@ -19,12 +19,16 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval started_by because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-started-by`(d.attendance, f.employment)
+where
+/*+ range [date("2003-06-30"), date("2005-12-31"), date("2008-06-30")] */
+interval_started_by(d.attendance, f.employment)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_started_by/interval_started_by.7.query.sqlpp
similarity index 74%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_started_by/interval_started_by.7.query.sqlpp
index a303827..2b3a26f 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_started_by/interval_started_by.7.query.sqlpp
@@ -19,12 +19,16 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   9th January 2019
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval started_by because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [datetime("2003-06-30T00:00:00.0"), datetime("2005-12-31T00:00:00.0"), datetime("2008-06-30T00:00:00.0")] */
+interval_started_by(f.vacation, d.break)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_started_by/interval_started_by.8.query.sqlpp
similarity index 74%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_started_by/interval_started_by.8.query.sqlpp
index a303827..b4de8e8 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_started_by/interval_started_by.8.query.sqlpp
@@ -19,12 +19,16 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   9th January 2019
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval started_by because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [datetime("2003-06-30T00:00:00.0"), datetime("2005-12-31T00:00:00.0"), datetime("2008-06-30T00:00:00.0")] */
+interval_started_by(d.break, f.vacation)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_started_by/interval_started_by.9.query.sqlpp
similarity index 74%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_started_by/interval_started_by.9.query.sqlpp
index 39e3372..ab02067 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_started_by/interval_started_by.9.query.sqlpp
@@ -19,12 +19,16 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval started_by because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [datetime("2003-06-30T00:00:00.0"), datetime("2005-12-31T00:00:00.0"), datetime("2008-06-30T00:00:00.0")] */
+interval_started_by(f.vacation, d.break)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_starts/interval_starts.1.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_starts/interval_starts.1.ddl.sqlpp
index fdef960..3326abb 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_starts/interval_starts.1.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_starts/interval_starts.1.ddl.sqlpp
@@ -19,7 +19,9 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval starts because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 drop dataverse TinyCollege if exists;
@@ -29,7 +31,9 @@ use TinyCollege;
 create type StaffType as open {
         name: string,
         office: string,
-        employment: interval
+        employment: interval,
+        vacation: interval,
+        office_hours: interval
 };
 create dataset Staff(StaffType)
 primary key name;
@@ -38,7 +42,9 @@ primary key name;
 create type StudentType as open {
         name: string,
         office: string,
-        attendance: interval
+        attendance: interval,
+        break: interval,
+        work_hours: interval
 };
 create dataset Students(StudentType)
 primary key name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_starts/interval_starts.10.query.sqlpp
similarity index 74%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_starts/interval_starts.10.query.sqlpp
index 39e3372..71a89a8 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_starts/interval_starts.10.query.sqlpp
@@ -19,12 +19,16 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval starts because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [datetime("2003-06-30T00:00:00.0"), datetime("2005-12-31T00:00:00.0"), datetime("2008-06-30T00:00:00.0")] */
+interval_starts(d.break, f.vacation)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_starts/interval_starts.11.query.sqlpp
similarity index 75%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_starts/interval_starts.11.query.sqlpp
index a303827..4e567c2 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_starts/interval_starts.11.query.sqlpp
@@ -19,12 +19,16 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   9th January 2019
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval starts because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [time("03:30:00.0+00:00"), time("05:59:00.0+00:00"), time("08:30:00.0+00:00")] */
+interval_starts(f.office_hours, d.work_hours)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_starts/interval_starts.12.query.sqlpp
similarity index 75%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_starts/interval_starts.12.query.sqlpp
index a303827..cd7cf4a 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_starts/interval_starts.12.query.sqlpp
@@ -19,12 +19,16 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   9th January 2019
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval starts because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [time("03:30:00.0+00:00"), time("05:59:00.0+00:00"), time("08:30:00.0+00:00")] */
+interval_starts(d.work_hours, f.office_hours)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_starts/interval_starts.13.query.sqlpp
similarity index 75%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_starts/interval_starts.13.query.sqlpp
index 39e3372..8146936 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_starts/interval_starts.13.query.sqlpp
@@ -19,12 +19,16 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval starts because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [time("03:30:00.0+00:00"), time("05:59:00.0+00:00"), time("08:30:00.0+00:00")] */
+interval_starts(f.office_hours, d.work_hours)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_starts/interval_starts.14.query.sqlpp
similarity index 75%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_starts/interval_starts.14.query.sqlpp
index 39e3372..1fea371 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_starts/interval_starts.14.query.sqlpp
@@ -19,12 +19,16 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval starts because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [time("03:30:00.0+00:00"), time("05:59:00.0+00:00"), time("08:30:00.0+00:00")] */
+interval_starts(d.work_hours, f.office_hours)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_starts/interval_starts.2.update.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_starts/interval_starts.2.update.sqlpp
index 4334476..552dbc7 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_starts/interval_starts.2.update.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_starts/interval_starts.2.update.sqlpp
@@ -19,7 +19,9 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval starts because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_starts/interval_starts.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_starts/interval_starts.3.query.sqlpp
index 915a717..51788b7 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_starts/interval_starts.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_starts/interval_starts.3.query.sqlpp
@@ -19,12 +19,16 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval starts because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-starts`(f.employment, d.attendance)
+where
+/*+ range [date("2003-06-30"), date("2005-12-31"), date("2008-06-30")] */
+interval_starts(f.employment, d.attendance)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_starts/interval_starts.4.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_starts/interval_starts.4.query.sqlpp
index 2e8b27e..cf9d660 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_starts/interval_starts.4.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_starts/interval_starts.4.query.sqlpp
@@ -19,12 +19,16 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval starts because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-starts`(d.attendance, f.employment)
+where
+/*+ range [date("2003-06-30"), date("2005-12-31"), date("2008-06-30")] */
+interval_starts(d.attendance, f.employment)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_starts/interval_starts.5.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_starts/interval_starts.5.query.sqlpp
index f5aa575..fe13a01 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_starts/interval_starts.5.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_starts/interval_starts.5.query.sqlpp
@@ -19,12 +19,16 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval starts because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-starts`(f.employment, d.attendance)
+where
+/*+ range [date("2003-06-30"), date("2005-12-31"), date("2008-06-30")] */
+interval_starts(f.employment, d.attendance)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_starts/interval_starts.6.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_starts/interval_starts.6.query.sqlpp
index 146ecd1..4621f50 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_starts/interval_starts.6.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_starts/interval_starts.6.query.sqlpp
@@ -19,12 +19,16 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval starts because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-starts`(d.attendance, f.employment)
+where
+/*+ range [date("2003-06-30"), date("2005-12-31"), date("2008-06-30")] */
+interval_starts(d.attendance, f.employment)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_starts/interval_starts.7.query.sqlpp
similarity index 74%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_starts/interval_starts.7.query.sqlpp
index a303827..49490f0 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_starts/interval_starts.7.query.sqlpp
@@ -19,12 +19,16 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   9th January 2019
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval starts because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [datetime("2003-06-30T00:00:00.0"), datetime("2005-12-31T00:00:00.0"), datetime("2008-06-30T00:00:00.0")] */
+interval_starts(f.vacation, d.break)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_starts/interval_starts.8.query.sqlpp
similarity index 74%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_starts/interval_starts.8.query.sqlpp
index a303827..5430332 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_starts/interval_starts.8.query.sqlpp
@@ -19,12 +19,16 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   9th January 2019
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval starts because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Staff as f, Students as d
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [datetime("2003-06-30T00:00:00.0"), datetime("2005-12-31T00:00:00.0"), datetime("2008-06-30T00:00:00.0")] */
+interval_starts(d.break, f.vacation)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_starts/interval_starts.9.query.sqlpp
similarity index 74%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_starts/interval_starts.9.query.sqlpp
index 39e3372..e97dafa 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.5.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_starts/interval_starts.9.query.sqlpp
@@ -19,12 +19,16 @@
 /*
  * Description      :   Check temporal join functionality for interval
  * Expected Result  :   Success
- * Date             :   26th Jun, 2015
+ * Date             :   10th Aug, 2020
+ * Note             :   Range hint is not picked for interval starts because it is not implemented
+ *                  :   It will default to Hybrid Has Join.
  */
 
 use TinyCollege;
 
 select element { "staff" : f.name, "student" : d.name }
 from Students as d, Staff as f
-where `interval-after`(f.employment, d.attendance)
+where
+/*+ range [datetime("2003-06-30T00:00:00.0"), datetime("2005-12-31T00:00:00.0"), datetime("2008-06-30T00:00:00.0")] */
+interval_starts(f.vacation, d.break)
 order by f.name, d.name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_before/interval_before.3.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_after/interval_after.10.adm
similarity index 67%
copy from asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_before/interval_before.3.adm
copy to asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_after/interval_after.10.adm
index 509693a..c15304d 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_before/interval_before.3.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_after/interval_after.10.adm
@@ -1,3 +1,3 @@
 { "staff": "Zack", "student": "Karen" }
 { "staff": "Zack", "student": "Steve" }
-{ "staff": "Zack", "student": "Tess" }
\ No newline at end of file
+{ "staff": "Zack", "student": "Tess" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_after/interval_after.11.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_after/interval_after.11.adm
new file mode 100644
index 0000000..93c0eb5
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_after/interval_after.11.adm
@@ -0,0 +1,9 @@
+{ "staff": "Franklin", "student": "Olga" }
+{ "staff": "Jake", "student": "Charles" }
+{ "staff": "Jake", "student": "Frank" }
+{ "staff": "Jake", "student": "Mary" }
+{ "staff": "Jake", "student": "Olga" }
+{ "staff": "MaryAnn", "student": "Charles" }
+{ "staff": "MaryAnn", "student": "Frank" }
+{ "staff": "MaryAnn", "student": "Mary" }
+{ "staff": "MaryAnn", "student": "Olga" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_before/interval_before.3.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_after/interval_after.12.adm
similarity index 67%
copy from asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_before/interval_before.3.adm
copy to asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_after/interval_after.12.adm
index 509693a..c15304d 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_before/interval_before.3.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_after/interval_after.12.adm
@@ -1,3 +1,3 @@
 { "staff": "Zack", "student": "Karen" }
 { "staff": "Zack", "student": "Steve" }
-{ "staff": "Zack", "student": "Tess" }
\ No newline at end of file
+{ "staff": "Zack", "student": "Tess" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_after/interval_after.13.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_after/interval_after.13.adm
new file mode 100644
index 0000000..93c0eb5
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_after/interval_after.13.adm
@@ -0,0 +1,9 @@
+{ "staff": "Franklin", "student": "Olga" }
+{ "staff": "Jake", "student": "Charles" }
+{ "staff": "Jake", "student": "Frank" }
+{ "staff": "Jake", "student": "Mary" }
+{ "staff": "Jake", "student": "Olga" }
+{ "staff": "MaryAnn", "student": "Charles" }
+{ "staff": "MaryAnn", "student": "Frank" }
+{ "staff": "MaryAnn", "student": "Mary" }
+{ "staff": "MaryAnn", "student": "Olga" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_before/interval_before.3.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_after/interval_after.14.adm
similarity index 67%
copy from asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_before/interval_before.3.adm
copy to asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_after/interval_after.14.adm
index 509693a..c15304d 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_before/interval_before.3.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_after/interval_after.14.adm
@@ -1,3 +1,3 @@
 { "staff": "Zack", "student": "Karen" }
 { "staff": "Zack", "student": "Steve" }
-{ "staff": "Zack", "student": "Tess" }
\ No newline at end of file
+{ "staff": "Zack", "student": "Tess" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_after/interval_after.3.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_after/interval_after.3.adm
index f38e40b..93c0eb5 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_after/interval_after.3.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_after/interval_after.3.adm
@@ -1,5 +1,9 @@
 { "staff": "Franklin", "student": "Olga" }
-{ "staff": "Maryann", "student": "Charles" }
-{ "staff": "Maryann", "student": "Frank" }
-{ "staff": "Maryann", "student": "Mary" }
-{ "staff": "Maryann", "student": "Olga" }
+{ "staff": "Jake", "student": "Charles" }
+{ "staff": "Jake", "student": "Frank" }
+{ "staff": "Jake", "student": "Mary" }
+{ "staff": "Jake", "student": "Olga" }
+{ "staff": "MaryAnn", "student": "Charles" }
+{ "staff": "MaryAnn", "student": "Frank" }
+{ "staff": "MaryAnn", "student": "Mary" }
+{ "staff": "MaryAnn", "student": "Olga" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_after/interval_after.5.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_after/interval_after.5.adm
index f38e40b..93c0eb5 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_after/interval_after.5.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_after/interval_after.5.adm
@@ -1,5 +1,9 @@
 { "staff": "Franklin", "student": "Olga" }
-{ "staff": "Maryann", "student": "Charles" }
-{ "staff": "Maryann", "student": "Frank" }
-{ "staff": "Maryann", "student": "Mary" }
-{ "staff": "Maryann", "student": "Olga" }
+{ "staff": "Jake", "student": "Charles" }
+{ "staff": "Jake", "student": "Frank" }
+{ "staff": "Jake", "student": "Mary" }
+{ "staff": "Jake", "student": "Olga" }
+{ "staff": "MaryAnn", "student": "Charles" }
+{ "staff": "MaryAnn", "student": "Frank" }
+{ "staff": "MaryAnn", "student": "Mary" }
+{ "staff": "MaryAnn", "student": "Olga" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_after/interval_after.7.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_after/interval_after.7.adm
new file mode 100644
index 0000000..93c0eb5
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_after/interval_after.7.adm
@@ -0,0 +1,9 @@
+{ "staff": "Franklin", "student": "Olga" }
+{ "staff": "Jake", "student": "Charles" }
+{ "staff": "Jake", "student": "Frank" }
+{ "staff": "Jake", "student": "Mary" }
+{ "staff": "Jake", "student": "Olga" }
+{ "staff": "MaryAnn", "student": "Charles" }
+{ "staff": "MaryAnn", "student": "Frank" }
+{ "staff": "MaryAnn", "student": "Mary" }
+{ "staff": "MaryAnn", "student": "Olga" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_before/interval_before.3.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_after/interval_after.8.adm
similarity index 67%
copy from asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_before/interval_before.3.adm
copy to asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_after/interval_after.8.adm
index 509693a..c15304d 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_before/interval_before.3.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_after/interval_after.8.adm
@@ -1,3 +1,3 @@
 { "staff": "Zack", "student": "Karen" }
 { "staff": "Zack", "student": "Steve" }
-{ "staff": "Zack", "student": "Tess" }
\ No newline at end of file
+{ "staff": "Zack", "student": "Tess" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_after/interval_after.9.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_after/interval_after.9.adm
new file mode 100644
index 0000000..93c0eb5
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_after/interval_after.9.adm
@@ -0,0 +1,9 @@
+{ "staff": "Franklin", "student": "Olga" }
+{ "staff": "Jake", "student": "Charles" }
+{ "staff": "Jake", "student": "Frank" }
+{ "staff": "Jake", "student": "Mary" }
+{ "staff": "Jake", "student": "Olga" }
+{ "staff": "MaryAnn", "student": "Charles" }
+{ "staff": "MaryAnn", "student": "Frank" }
+{ "staff": "MaryAnn", "student": "Mary" }
+{ "staff": "MaryAnn", "student": "Olga" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_before/interval_before.10.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_before/interval_before.10.adm
new file mode 100644
index 0000000..93c0eb5
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_before/interval_before.10.adm
@@ -0,0 +1,9 @@
+{ "staff": "Franklin", "student": "Olga" }
+{ "staff": "Jake", "student": "Charles" }
+{ "staff": "Jake", "student": "Frank" }
+{ "staff": "Jake", "student": "Mary" }
+{ "staff": "Jake", "student": "Olga" }
+{ "staff": "MaryAnn", "student": "Charles" }
+{ "staff": "MaryAnn", "student": "Frank" }
+{ "staff": "MaryAnn", "student": "Mary" }
+{ "staff": "MaryAnn", "student": "Olga" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_before/interval_before.3.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_before/interval_before.11.adm
similarity index 67%
copy from asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_before/interval_before.3.adm
copy to asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_before/interval_before.11.adm
index 509693a..c15304d 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_before/interval_before.3.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_before/interval_before.11.adm
@@ -1,3 +1,3 @@
 { "staff": "Zack", "student": "Karen" }
 { "staff": "Zack", "student": "Steve" }
-{ "staff": "Zack", "student": "Tess" }
\ No newline at end of file
+{ "staff": "Zack", "student": "Tess" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_before/interval_before.12.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_before/interval_before.12.adm
new file mode 100644
index 0000000..93c0eb5
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_before/interval_before.12.adm
@@ -0,0 +1,9 @@
+{ "staff": "Franklin", "student": "Olga" }
+{ "staff": "Jake", "student": "Charles" }
+{ "staff": "Jake", "student": "Frank" }
+{ "staff": "Jake", "student": "Mary" }
+{ "staff": "Jake", "student": "Olga" }
+{ "staff": "MaryAnn", "student": "Charles" }
+{ "staff": "MaryAnn", "student": "Frank" }
+{ "staff": "MaryAnn", "student": "Mary" }
+{ "staff": "MaryAnn", "student": "Olga" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_before/interval_before.3.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_before/interval_before.13.adm
similarity index 67%
copy from asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_before/interval_before.3.adm
copy to asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_before/interval_before.13.adm
index 509693a..c15304d 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_before/interval_before.3.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_before/interval_before.13.adm
@@ -1,3 +1,3 @@
 { "staff": "Zack", "student": "Karen" }
 { "staff": "Zack", "student": "Steve" }
-{ "staff": "Zack", "student": "Tess" }
\ No newline at end of file
+{ "staff": "Zack", "student": "Tess" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_before/interval_before.14.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_before/interval_before.14.adm
new file mode 100644
index 0000000..93c0eb5
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_before/interval_before.14.adm
@@ -0,0 +1,9 @@
+{ "staff": "Franklin", "student": "Olga" }
+{ "staff": "Jake", "student": "Charles" }
+{ "staff": "Jake", "student": "Frank" }
+{ "staff": "Jake", "student": "Mary" }
+{ "staff": "Jake", "student": "Olga" }
+{ "staff": "MaryAnn", "student": "Charles" }
+{ "staff": "MaryAnn", "student": "Frank" }
+{ "staff": "MaryAnn", "student": "Mary" }
+{ "staff": "MaryAnn", "student": "Olga" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_before/interval_before.3.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_before/interval_before.3.adm
index 509693a..c15304d 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_before/interval_before.3.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_before/interval_before.3.adm
@@ -1,3 +1,3 @@
 { "staff": "Zack", "student": "Karen" }
 { "staff": "Zack", "student": "Steve" }
-{ "staff": "Zack", "student": "Tess" }
\ No newline at end of file
+{ "staff": "Zack", "student": "Tess" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_before/interval_before.4.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_before/interval_before.4.adm
index f38e40b..93c0eb5 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_before/interval_before.4.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_before/interval_before.4.adm
@@ -1,5 +1,9 @@
 { "staff": "Franklin", "student": "Olga" }
-{ "staff": "Maryann", "student": "Charles" }
-{ "staff": "Maryann", "student": "Frank" }
-{ "staff": "Maryann", "student": "Mary" }
-{ "staff": "Maryann", "student": "Olga" }
+{ "staff": "Jake", "student": "Charles" }
+{ "staff": "Jake", "student": "Frank" }
+{ "staff": "Jake", "student": "Mary" }
+{ "staff": "Jake", "student": "Olga" }
+{ "staff": "MaryAnn", "student": "Charles" }
+{ "staff": "MaryAnn", "student": "Frank" }
+{ "staff": "MaryAnn", "student": "Mary" }
+{ "staff": "MaryAnn", "student": "Olga" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_before/interval_before.5.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_before/interval_before.5.adm
index 509693a..c15304d 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_before/interval_before.5.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_before/interval_before.5.adm
@@ -1,3 +1,3 @@
 { "staff": "Zack", "student": "Karen" }
 { "staff": "Zack", "student": "Steve" }
-{ "staff": "Zack", "student": "Tess" }
\ No newline at end of file
+{ "staff": "Zack", "student": "Tess" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_before/interval_before.6.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_before/interval_before.6.adm
index f38e40b..93c0eb5 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_before/interval_before.6.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_before/interval_before.6.adm
@@ -1,5 +1,9 @@
 { "staff": "Franklin", "student": "Olga" }
-{ "staff": "Maryann", "student": "Charles" }
-{ "staff": "Maryann", "student": "Frank" }
-{ "staff": "Maryann", "student": "Mary" }
-{ "staff": "Maryann", "student": "Olga" }
+{ "staff": "Jake", "student": "Charles" }
+{ "staff": "Jake", "student": "Frank" }
+{ "staff": "Jake", "student": "Mary" }
+{ "staff": "Jake", "student": "Olga" }
+{ "staff": "MaryAnn", "student": "Charles" }
+{ "staff": "MaryAnn", "student": "Frank" }
+{ "staff": "MaryAnn", "student": "Mary" }
+{ "staff": "MaryAnn", "student": "Olga" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_before/interval_before.3.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_before/interval_before.7.adm
similarity index 67%
copy from asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_before/interval_before.3.adm
copy to asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_before/interval_before.7.adm
index 509693a..c15304d 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_before/interval_before.3.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_before/interval_before.7.adm
@@ -1,3 +1,3 @@
 { "staff": "Zack", "student": "Karen" }
 { "staff": "Zack", "student": "Steve" }
-{ "staff": "Zack", "student": "Tess" }
\ No newline at end of file
+{ "staff": "Zack", "student": "Tess" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_before/interval_before.8.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_before/interval_before.8.adm
new file mode 100644
index 0000000..93c0eb5
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_before/interval_before.8.adm
@@ -0,0 +1,9 @@
+{ "staff": "Franklin", "student": "Olga" }
+{ "staff": "Jake", "student": "Charles" }
+{ "staff": "Jake", "student": "Frank" }
+{ "staff": "Jake", "student": "Mary" }
+{ "staff": "Jake", "student": "Olga" }
+{ "staff": "MaryAnn", "student": "Charles" }
+{ "staff": "MaryAnn", "student": "Frank" }
+{ "staff": "MaryAnn", "student": "Mary" }
+{ "staff": "MaryAnn", "student": "Olga" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_before/interval_before.3.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_before/interval_before.9.adm
similarity index 67%
copy from asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_before/interval_before.3.adm
copy to asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_before/interval_before.9.adm
index 509693a..c15304d 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_before/interval_before.3.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_before/interval_before.9.adm
@@ -1,3 +1,3 @@
 { "staff": "Zack", "student": "Karen" }
 { "staff": "Zack", "student": "Steve" }
-{ "staff": "Zack", "student": "Tess" }
\ No newline at end of file
+{ "staff": "Zack", "student": "Tess" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covered_by/interval_covered_by.4.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covered_by/interval_covered_by.10.adm
similarity index 79%
copy from asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covered_by/interval_covered_by.4.adm
copy to asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covered_by/interval_covered_by.10.adm
index 4e22101..90e39d1 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covered_by/interval_covered_by.4.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covered_by/interval_covered_by.10.adm
@@ -3,9 +3,9 @@
 { "staff": "Elisabeth", "student": "Steve" }
 { "staff": "Elisabeth", "student": "Tess" }
 { "staff": "Franklin", "student": "Karen" }
-{ "staff": "Maryann", "student": "Karen" }
-{ "staff": "Maryann", "student": "Steve" }
-{ "staff": "Maryann", "student": "Tess" }
+{ "staff": "MaryAnn", "student": "Karen" }
+{ "staff": "MaryAnn", "student": "Steve" }
+{ "staff": "MaryAnn", "student": "Tess" }
 { "staff": "Vicky", "student": "Charles" }
 { "staff": "Vicky", "student": "Frank" }
 { "staff": "Vicky", "student": "Karen" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covered_by/interval_covered_by.11.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covered_by/interval_covered_by.11.adm
new file mode 100644
index 0000000..1a67e10
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covered_by/interval_covered_by.11.adm
@@ -0,0 +1,4 @@
+{ "staff": "Zack", "student": "Charles" }
+{ "staff": "Zack", "student": "Frank" }
+{ "staff": "Zack", "student": "Mary" }
+{ "staff": "Zack", "student": "Olga" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covered_by/interval_covered_by.4.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covered_by/interval_covered_by.12.adm
similarity index 79%
copy from asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covered_by/interval_covered_by.4.adm
copy to asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covered_by/interval_covered_by.12.adm
index 4e22101..90e39d1 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covered_by/interval_covered_by.4.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covered_by/interval_covered_by.12.adm
@@ -3,9 +3,9 @@
 { "staff": "Elisabeth", "student": "Steve" }
 { "staff": "Elisabeth", "student": "Tess" }
 { "staff": "Franklin", "student": "Karen" }
-{ "staff": "Maryann", "student": "Karen" }
-{ "staff": "Maryann", "student": "Steve" }
-{ "staff": "Maryann", "student": "Tess" }
+{ "staff": "MaryAnn", "student": "Karen" }
+{ "staff": "MaryAnn", "student": "Steve" }
+{ "staff": "MaryAnn", "student": "Tess" }
 { "staff": "Vicky", "student": "Charles" }
 { "staff": "Vicky", "student": "Frank" }
 { "staff": "Vicky", "student": "Karen" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covered_by/interval_covered_by.13.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covered_by/interval_covered_by.13.adm
new file mode 100644
index 0000000..1a67e10
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covered_by/interval_covered_by.13.adm
@@ -0,0 +1,4 @@
+{ "staff": "Zack", "student": "Charles" }
+{ "staff": "Zack", "student": "Frank" }
+{ "staff": "Zack", "student": "Mary" }
+{ "staff": "Zack", "student": "Olga" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covered_by/interval_covered_by.4.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covered_by/interval_covered_by.14.adm
similarity index 79%
copy from asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covered_by/interval_covered_by.4.adm
copy to asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covered_by/interval_covered_by.14.adm
index 4e22101..90e39d1 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covered_by/interval_covered_by.4.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covered_by/interval_covered_by.14.adm
@@ -3,9 +3,9 @@
 { "staff": "Elisabeth", "student": "Steve" }
 { "staff": "Elisabeth", "student": "Tess" }
 { "staff": "Franklin", "student": "Karen" }
-{ "staff": "Maryann", "student": "Karen" }
-{ "staff": "Maryann", "student": "Steve" }
-{ "staff": "Maryann", "student": "Tess" }
+{ "staff": "MaryAnn", "student": "Karen" }
+{ "staff": "MaryAnn", "student": "Steve" }
+{ "staff": "MaryAnn", "student": "Tess" }
 { "staff": "Vicky", "student": "Charles" }
 { "staff": "Vicky", "student": "Frank" }
 { "staff": "Vicky", "student": "Karen" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covered_by/interval_covered_by.4.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covered_by/interval_covered_by.4.adm
index 4e22101..90e39d1 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covered_by/interval_covered_by.4.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covered_by/interval_covered_by.4.adm
@@ -3,9 +3,9 @@
 { "staff": "Elisabeth", "student": "Steve" }
 { "staff": "Elisabeth", "student": "Tess" }
 { "staff": "Franklin", "student": "Karen" }
-{ "staff": "Maryann", "student": "Karen" }
-{ "staff": "Maryann", "student": "Steve" }
-{ "staff": "Maryann", "student": "Tess" }
+{ "staff": "MaryAnn", "student": "Karen" }
+{ "staff": "MaryAnn", "student": "Steve" }
+{ "staff": "MaryAnn", "student": "Tess" }
 { "staff": "Vicky", "student": "Charles" }
 { "staff": "Vicky", "student": "Frank" }
 { "staff": "Vicky", "student": "Karen" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covered_by/interval_covered_by.6.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covered_by/interval_covered_by.6.adm
index 4e22101..90e39d1 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covered_by/interval_covered_by.6.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covered_by/interval_covered_by.6.adm
@@ -3,9 +3,9 @@
 { "staff": "Elisabeth", "student": "Steve" }
 { "staff": "Elisabeth", "student": "Tess" }
 { "staff": "Franklin", "student": "Karen" }
-{ "staff": "Maryann", "student": "Karen" }
-{ "staff": "Maryann", "student": "Steve" }
-{ "staff": "Maryann", "student": "Tess" }
+{ "staff": "MaryAnn", "student": "Karen" }
+{ "staff": "MaryAnn", "student": "Steve" }
+{ "staff": "MaryAnn", "student": "Tess" }
 { "staff": "Vicky", "student": "Charles" }
 { "staff": "Vicky", "student": "Frank" }
 { "staff": "Vicky", "student": "Karen" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covered_by/interval_covered_by.7.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covered_by/interval_covered_by.7.adm
new file mode 100644
index 0000000..1a67e10
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covered_by/interval_covered_by.7.adm
@@ -0,0 +1,4 @@
+{ "staff": "Zack", "student": "Charles" }
+{ "staff": "Zack", "student": "Frank" }
+{ "staff": "Zack", "student": "Mary" }
+{ "staff": "Zack", "student": "Olga" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covered_by/interval_covered_by.4.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covered_by/interval_covered_by.8.adm
similarity index 79%
copy from asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covered_by/interval_covered_by.4.adm
copy to asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covered_by/interval_covered_by.8.adm
index 4e22101..90e39d1 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covered_by/interval_covered_by.4.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covered_by/interval_covered_by.8.adm
@@ -3,9 +3,9 @@
 { "staff": "Elisabeth", "student": "Steve" }
 { "staff": "Elisabeth", "student": "Tess" }
 { "staff": "Franklin", "student": "Karen" }
-{ "staff": "Maryann", "student": "Karen" }
-{ "staff": "Maryann", "student": "Steve" }
-{ "staff": "Maryann", "student": "Tess" }
+{ "staff": "MaryAnn", "student": "Karen" }
+{ "staff": "MaryAnn", "student": "Steve" }
+{ "staff": "MaryAnn", "student": "Tess" }
 { "staff": "Vicky", "student": "Charles" }
 { "staff": "Vicky", "student": "Frank" }
 { "staff": "Vicky", "student": "Karen" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covered_by/interval_covered_by.9.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covered_by/interval_covered_by.9.adm
new file mode 100644
index 0000000..1a67e10
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covered_by/interval_covered_by.9.adm
@@ -0,0 +1,4 @@
+{ "staff": "Zack", "student": "Charles" }
+{ "staff": "Zack", "student": "Frank" }
+{ "staff": "Zack", "student": "Mary" }
+{ "staff": "Zack", "student": "Olga" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covers/interval_covers.10.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covers/interval_covers.10.adm
new file mode 100644
index 0000000..1a67e10
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covers/interval_covers.10.adm
@@ -0,0 +1,4 @@
+{ "staff": "Zack", "student": "Charles" }
+{ "staff": "Zack", "student": "Frank" }
+{ "staff": "Zack", "student": "Mary" }
+{ "staff": "Zack", "student": "Olga" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covered_by/interval_covered_by.4.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covers/interval_covers.11.adm
similarity index 79%
copy from asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covered_by/interval_covered_by.4.adm
copy to asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covers/interval_covers.11.adm
index 4e22101..90e39d1 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covered_by/interval_covered_by.4.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covers/interval_covers.11.adm
@@ -3,9 +3,9 @@
 { "staff": "Elisabeth", "student": "Steve" }
 { "staff": "Elisabeth", "student": "Tess" }
 { "staff": "Franklin", "student": "Karen" }
-{ "staff": "Maryann", "student": "Karen" }
-{ "staff": "Maryann", "student": "Steve" }
-{ "staff": "Maryann", "student": "Tess" }
+{ "staff": "MaryAnn", "student": "Karen" }
+{ "staff": "MaryAnn", "student": "Steve" }
+{ "staff": "MaryAnn", "student": "Tess" }
 { "staff": "Vicky", "student": "Charles" }
 { "staff": "Vicky", "student": "Frank" }
 { "staff": "Vicky", "student": "Karen" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covers/interval_covers.12.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covers/interval_covers.12.adm
new file mode 100644
index 0000000..1a67e10
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covers/interval_covers.12.adm
@@ -0,0 +1,4 @@
+{ "staff": "Zack", "student": "Charles" }
+{ "staff": "Zack", "student": "Frank" }
+{ "staff": "Zack", "student": "Mary" }
+{ "staff": "Zack", "student": "Olga" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covered_by/interval_covered_by.4.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covers/interval_covers.13.adm
similarity index 79%
copy from asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covered_by/interval_covered_by.4.adm
copy to asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covers/interval_covers.13.adm
index 4e22101..90e39d1 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covered_by/interval_covered_by.4.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covers/interval_covers.13.adm
@@ -3,9 +3,9 @@
 { "staff": "Elisabeth", "student": "Steve" }
 { "staff": "Elisabeth", "student": "Tess" }
 { "staff": "Franklin", "student": "Karen" }
-{ "staff": "Maryann", "student": "Karen" }
-{ "staff": "Maryann", "student": "Steve" }
-{ "staff": "Maryann", "student": "Tess" }
+{ "staff": "MaryAnn", "student": "Karen" }
+{ "staff": "MaryAnn", "student": "Steve" }
+{ "staff": "MaryAnn", "student": "Tess" }
 { "staff": "Vicky", "student": "Charles" }
 { "staff": "Vicky", "student": "Frank" }
 { "staff": "Vicky", "student": "Karen" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covers/interval_covers.14.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covers/interval_covers.14.adm
new file mode 100644
index 0000000..1a67e10
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covers/interval_covers.14.adm
@@ -0,0 +1,4 @@
+{ "staff": "Zack", "student": "Charles" }
+{ "staff": "Zack", "student": "Frank" }
+{ "staff": "Zack", "student": "Mary" }
+{ "staff": "Zack", "student": "Olga" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covers/interval_covers.3.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covers/interval_covers.3.adm
index 4e22101..90e39d1 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covers/interval_covers.3.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covers/interval_covers.3.adm
@@ -3,9 +3,9 @@
 { "staff": "Elisabeth", "student": "Steve" }
 { "staff": "Elisabeth", "student": "Tess" }
 { "staff": "Franklin", "student": "Karen" }
-{ "staff": "Maryann", "student": "Karen" }
-{ "staff": "Maryann", "student": "Steve" }
-{ "staff": "Maryann", "student": "Tess" }
+{ "staff": "MaryAnn", "student": "Karen" }
+{ "staff": "MaryAnn", "student": "Steve" }
+{ "staff": "MaryAnn", "student": "Tess" }
 { "staff": "Vicky", "student": "Charles" }
 { "staff": "Vicky", "student": "Frank" }
 { "staff": "Vicky", "student": "Karen" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covers/interval_covers.5.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covers/interval_covers.5.adm
index 4e22101..90e39d1 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covers/interval_covers.5.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covers/interval_covers.5.adm
@@ -3,9 +3,9 @@
 { "staff": "Elisabeth", "student": "Steve" }
 { "staff": "Elisabeth", "student": "Tess" }
 { "staff": "Franklin", "student": "Karen" }
-{ "staff": "Maryann", "student": "Karen" }
-{ "staff": "Maryann", "student": "Steve" }
-{ "staff": "Maryann", "student": "Tess" }
+{ "staff": "MaryAnn", "student": "Karen" }
+{ "staff": "MaryAnn", "student": "Steve" }
+{ "staff": "MaryAnn", "student": "Tess" }
 { "staff": "Vicky", "student": "Charles" }
 { "staff": "Vicky", "student": "Frank" }
 { "staff": "Vicky", "student": "Karen" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covered_by/interval_covered_by.4.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covers/interval_covers.7.adm
similarity index 79%
copy from asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covered_by/interval_covered_by.4.adm
copy to asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covers/interval_covers.7.adm
index 4e22101..90e39d1 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covered_by/interval_covered_by.4.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covers/interval_covers.7.adm
@@ -3,9 +3,9 @@
 { "staff": "Elisabeth", "student": "Steve" }
 { "staff": "Elisabeth", "student": "Tess" }
 { "staff": "Franklin", "student": "Karen" }
-{ "staff": "Maryann", "student": "Karen" }
-{ "staff": "Maryann", "student": "Steve" }
-{ "staff": "Maryann", "student": "Tess" }
+{ "staff": "MaryAnn", "student": "Karen" }
+{ "staff": "MaryAnn", "student": "Steve" }
+{ "staff": "MaryAnn", "student": "Tess" }
 { "staff": "Vicky", "student": "Charles" }
 { "staff": "Vicky", "student": "Frank" }
 { "staff": "Vicky", "student": "Karen" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covers/interval_covers.8.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covers/interval_covers.8.adm
new file mode 100644
index 0000000..1a67e10
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covers/interval_covers.8.adm
@@ -0,0 +1,4 @@
+{ "staff": "Zack", "student": "Charles" }
+{ "staff": "Zack", "student": "Frank" }
+{ "staff": "Zack", "student": "Mary" }
+{ "staff": "Zack", "student": "Olga" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covered_by/interval_covered_by.4.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covers/interval_covers.9.adm
similarity index 79%
copy from asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covered_by/interval_covered_by.4.adm
copy to asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covers/interval_covers.9.adm
index 4e22101..90e39d1 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covered_by/interval_covered_by.4.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_covers/interval_covers.9.adm
@@ -3,9 +3,9 @@
 { "staff": "Elisabeth", "student": "Steve" }
 { "staff": "Elisabeth", "student": "Tess" }
 { "staff": "Franklin", "student": "Karen" }
-{ "staff": "Maryann", "student": "Karen" }
-{ "staff": "Maryann", "student": "Steve" }
-{ "staff": "Maryann", "student": "Tess" }
+{ "staff": "MaryAnn", "student": "Karen" }
+{ "staff": "MaryAnn", "student": "Steve" }
+{ "staff": "MaryAnn", "student": "Tess" }
 { "staff": "Vicky", "student": "Charles" }
 { "staff": "Vicky", "student": "Frank" }
 { "staff": "Vicky", "student": "Karen" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ended_by/interval_ended_by.4.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ended_by/interval_ended_by.10.adm
similarity index 71%
copy from asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ended_by/interval_ended_by.4.adm
copy to asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ended_by/interval_ended_by.10.adm
index 5af9101..1fc19e7 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ended_by/interval_ended_by.4.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ended_by/interval_ended_by.10.adm
@@ -1,7 +1,7 @@
 { "staff": "Elisabeth", "student": "Steve" }
 { "staff": "Elisabeth", "student": "Tess" }
 { "staff": "Franklin", "student": "Karen" }
-{ "staff": "Maryann", "student": "Steve" }
-{ "staff": "Maryann", "student": "Tess" }
+{ "staff": "MaryAnn", "student": "Steve" }
+{ "staff": "MaryAnn", "student": "Tess" }
 { "staff": "Vicky", "student": "Steve" }
 { "staff": "Vicky", "student": "Tess" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ended_by/interval_ended_by.11.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ended_by/interval_ended_by.11.adm
new file mode 100644
index 0000000..5857139
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ended_by/interval_ended_by.11.adm
@@ -0,0 +1 @@
+{ "staff": "Zack", "student": "Olga" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ended_by/interval_ended_by.4.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ended_by/interval_ended_by.12.adm
similarity index 71%
copy from asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ended_by/interval_ended_by.4.adm
copy to asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ended_by/interval_ended_by.12.adm
index 5af9101..1fc19e7 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ended_by/interval_ended_by.4.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ended_by/interval_ended_by.12.adm
@@ -1,7 +1,7 @@
 { "staff": "Elisabeth", "student": "Steve" }
 { "staff": "Elisabeth", "student": "Tess" }
 { "staff": "Franklin", "student": "Karen" }
-{ "staff": "Maryann", "student": "Steve" }
-{ "staff": "Maryann", "student": "Tess" }
+{ "staff": "MaryAnn", "student": "Steve" }
+{ "staff": "MaryAnn", "student": "Tess" }
 { "staff": "Vicky", "student": "Steve" }
 { "staff": "Vicky", "student": "Tess" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ended_by/interval_ended_by.13.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ended_by/interval_ended_by.13.adm
new file mode 100644
index 0000000..5857139
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ended_by/interval_ended_by.13.adm
@@ -0,0 +1 @@
+{ "staff": "Zack", "student": "Olga" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ended_by/interval_ended_by.4.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ended_by/interval_ended_by.14.adm
similarity index 71%
copy from asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ended_by/interval_ended_by.4.adm
copy to asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ended_by/interval_ended_by.14.adm
index 5af9101..1fc19e7 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ended_by/interval_ended_by.4.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ended_by/interval_ended_by.14.adm
@@ -1,7 +1,7 @@
 { "staff": "Elisabeth", "student": "Steve" }
 { "staff": "Elisabeth", "student": "Tess" }
 { "staff": "Franklin", "student": "Karen" }
-{ "staff": "Maryann", "student": "Steve" }
-{ "staff": "Maryann", "student": "Tess" }
+{ "staff": "MaryAnn", "student": "Steve" }
+{ "staff": "MaryAnn", "student": "Tess" }
 { "staff": "Vicky", "student": "Steve" }
 { "staff": "Vicky", "student": "Tess" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ended_by/interval_ended_by.4.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ended_by/interval_ended_by.4.adm
index 5af9101..1fc19e7 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ended_by/interval_ended_by.4.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ended_by/interval_ended_by.4.adm
@@ -1,7 +1,7 @@
 { "staff": "Elisabeth", "student": "Steve" }
 { "staff": "Elisabeth", "student": "Tess" }
 { "staff": "Franklin", "student": "Karen" }
-{ "staff": "Maryann", "student": "Steve" }
-{ "staff": "Maryann", "student": "Tess" }
+{ "staff": "MaryAnn", "student": "Steve" }
+{ "staff": "MaryAnn", "student": "Tess" }
 { "staff": "Vicky", "student": "Steve" }
 { "staff": "Vicky", "student": "Tess" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ended_by/interval_ended_by.6.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ended_by/interval_ended_by.6.adm
index 5af9101..1fc19e7 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ended_by/interval_ended_by.6.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ended_by/interval_ended_by.6.adm
@@ -1,7 +1,7 @@
 { "staff": "Elisabeth", "student": "Steve" }
 { "staff": "Elisabeth", "student": "Tess" }
 { "staff": "Franklin", "student": "Karen" }
-{ "staff": "Maryann", "student": "Steve" }
-{ "staff": "Maryann", "student": "Tess" }
+{ "staff": "MaryAnn", "student": "Steve" }
+{ "staff": "MaryAnn", "student": "Tess" }
 { "staff": "Vicky", "student": "Steve" }
 { "staff": "Vicky", "student": "Tess" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ended_by/interval_ended_by.7.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ended_by/interval_ended_by.7.adm
new file mode 100644
index 0000000..5857139
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ended_by/interval_ended_by.7.adm
@@ -0,0 +1 @@
+{ "staff": "Zack", "student": "Olga" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ended_by/interval_ended_by.4.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ended_by/interval_ended_by.8.adm
similarity index 71%
copy from asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ended_by/interval_ended_by.4.adm
copy to asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ended_by/interval_ended_by.8.adm
index 5af9101..1fc19e7 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ended_by/interval_ended_by.4.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ended_by/interval_ended_by.8.adm
@@ -1,7 +1,7 @@
 { "staff": "Elisabeth", "student": "Steve" }
 { "staff": "Elisabeth", "student": "Tess" }
 { "staff": "Franklin", "student": "Karen" }
-{ "staff": "Maryann", "student": "Steve" }
-{ "staff": "Maryann", "student": "Tess" }
+{ "staff": "MaryAnn", "student": "Steve" }
+{ "staff": "MaryAnn", "student": "Tess" }
 { "staff": "Vicky", "student": "Steve" }
 { "staff": "Vicky", "student": "Tess" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ended_by/interval_ended_by.9.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ended_by/interval_ended_by.9.adm
new file mode 100644
index 0000000..5857139
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ended_by/interval_ended_by.9.adm
@@ -0,0 +1 @@
+{ "staff": "Zack", "student": "Olga" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ends/interval_ends.10.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ends/interval_ends.10.adm
new file mode 100644
index 0000000..5857139
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ends/interval_ends.10.adm
@@ -0,0 +1 @@
+{ "staff": "Zack", "student": "Olga" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ended_by/interval_ended_by.4.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ends/interval_ends.11.adm
similarity index 71%
copy from asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ended_by/interval_ended_by.4.adm
copy to asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ends/interval_ends.11.adm
index 5af9101..1fc19e7 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ended_by/interval_ended_by.4.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ends/interval_ends.11.adm
@@ -1,7 +1,7 @@
 { "staff": "Elisabeth", "student": "Steve" }
 { "staff": "Elisabeth", "student": "Tess" }
 { "staff": "Franklin", "student": "Karen" }
-{ "staff": "Maryann", "student": "Steve" }
-{ "staff": "Maryann", "student": "Tess" }
+{ "staff": "MaryAnn", "student": "Steve" }
+{ "staff": "MaryAnn", "student": "Tess" }
 { "staff": "Vicky", "student": "Steve" }
 { "staff": "Vicky", "student": "Tess" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ends/interval_ends.12.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ends/interval_ends.12.adm
new file mode 100644
index 0000000..5857139
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ends/interval_ends.12.adm
@@ -0,0 +1 @@
+{ "staff": "Zack", "student": "Olga" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ended_by/interval_ended_by.4.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ends/interval_ends.13.adm
similarity index 71%
copy from asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ended_by/interval_ended_by.4.adm
copy to asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ends/interval_ends.13.adm
index 5af9101..1fc19e7 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ended_by/interval_ended_by.4.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ends/interval_ends.13.adm
@@ -1,7 +1,7 @@
 { "staff": "Elisabeth", "student": "Steve" }
 { "staff": "Elisabeth", "student": "Tess" }
 { "staff": "Franklin", "student": "Karen" }
-{ "staff": "Maryann", "student": "Steve" }
-{ "staff": "Maryann", "student": "Tess" }
+{ "staff": "MaryAnn", "student": "Steve" }
+{ "staff": "MaryAnn", "student": "Tess" }
 { "staff": "Vicky", "student": "Steve" }
 { "staff": "Vicky", "student": "Tess" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ends/interval_ends.14.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ends/interval_ends.14.adm
new file mode 100644
index 0000000..5857139
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ends/interval_ends.14.adm
@@ -0,0 +1 @@
+{ "staff": "Zack", "student": "Olga" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ends/interval_ends.3.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ends/interval_ends.3.adm
index 5af9101..1fc19e7 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ends/interval_ends.3.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ends/interval_ends.3.adm
@@ -1,7 +1,7 @@
 { "staff": "Elisabeth", "student": "Steve" }
 { "staff": "Elisabeth", "student": "Tess" }
 { "staff": "Franklin", "student": "Karen" }
-{ "staff": "Maryann", "student": "Steve" }
-{ "staff": "Maryann", "student": "Tess" }
+{ "staff": "MaryAnn", "student": "Steve" }
+{ "staff": "MaryAnn", "student": "Tess" }
 { "staff": "Vicky", "student": "Steve" }
 { "staff": "Vicky", "student": "Tess" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ends/interval_ends.5.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ends/interval_ends.5.adm
index 5af9101..1fc19e7 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ends/interval_ends.5.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ends/interval_ends.5.adm
@@ -1,7 +1,7 @@
 { "staff": "Elisabeth", "student": "Steve" }
 { "staff": "Elisabeth", "student": "Tess" }
 { "staff": "Franklin", "student": "Karen" }
-{ "staff": "Maryann", "student": "Steve" }
-{ "staff": "Maryann", "student": "Tess" }
+{ "staff": "MaryAnn", "student": "Steve" }
+{ "staff": "MaryAnn", "student": "Tess" }
 { "staff": "Vicky", "student": "Steve" }
 { "staff": "Vicky", "student": "Tess" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ended_by/interval_ended_by.4.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ends/interval_ends.7.adm
similarity index 71%
copy from asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ended_by/interval_ended_by.4.adm
copy to asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ends/interval_ends.7.adm
index 5af9101..1fc19e7 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ended_by/interval_ended_by.4.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ends/interval_ends.7.adm
@@ -1,7 +1,7 @@
 { "staff": "Elisabeth", "student": "Steve" }
 { "staff": "Elisabeth", "student": "Tess" }
 { "staff": "Franklin", "student": "Karen" }
-{ "staff": "Maryann", "student": "Steve" }
-{ "staff": "Maryann", "student": "Tess" }
+{ "staff": "MaryAnn", "student": "Steve" }
+{ "staff": "MaryAnn", "student": "Tess" }
 { "staff": "Vicky", "student": "Steve" }
 { "staff": "Vicky", "student": "Tess" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ends/interval_ends.8.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ends/interval_ends.8.adm
new file mode 100644
index 0000000..5857139
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ends/interval_ends.8.adm
@@ -0,0 +1 @@
+{ "staff": "Zack", "student": "Olga" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ended_by/interval_ended_by.4.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ends/interval_ends.9.adm
similarity index 71%
copy from asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ended_by/interval_ended_by.4.adm
copy to asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ends/interval_ends.9.adm
index 5af9101..1fc19e7 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ended_by/interval_ended_by.4.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_ends/interval_ends.9.adm
@@ -1,7 +1,7 @@
 { "staff": "Elisabeth", "student": "Steve" }
 { "staff": "Elisabeth", "student": "Tess" }
 { "staff": "Franklin", "student": "Karen" }
-{ "staff": "Maryann", "student": "Steve" }
-{ "staff": "Maryann", "student": "Tess" }
+{ "staff": "MaryAnn", "student": "Steve" }
+{ "staff": "MaryAnn", "student": "Tess" }
 { "staff": "Vicky", "student": "Steve" }
 { "staff": "Vicky", "student": "Tess" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_meets/interval_meets.10.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_meets/interval_meets.10.adm
new file mode 100644
index 0000000..cd4b3ba
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_meets/interval_meets.10.adm
@@ -0,0 +1,4 @@
+{ "staff": "Alex", "student": "Olga" }
+{ "staff": "Franklin", "student": "Charles" }
+{ "staff": "Franklin", "student": "Frank" }
+{ "staff": "Henry", "student": "Olga" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_meets/interval_meets.3.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_meets/interval_meets.11.adm
similarity index 66%
copy from asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_meets/interval_meets.3.adm
copy to asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_meets/interval_meets.11.adm
index 5568195..8cafa72 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_meets/interval_meets.3.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_meets/interval_meets.11.adm
@@ -1,2 +1,3 @@
 { "staff": "Alex", "student": "Tess" }
 { "staff": "Henry", "student": "Tess" }
+{ "staff": "Jake", "student": "Tess" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_meets/interval_meets.12.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_meets/interval_meets.12.adm
new file mode 100644
index 0000000..cd4b3ba
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_meets/interval_meets.12.adm
@@ -0,0 +1,4 @@
+{ "staff": "Alex", "student": "Olga" }
+{ "staff": "Franklin", "student": "Charles" }
+{ "staff": "Franklin", "student": "Frank" }
+{ "staff": "Henry", "student": "Olga" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_meets/interval_meets.3.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_meets/interval_meets.13.adm
similarity index 66%
copy from asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_meets/interval_meets.3.adm
copy to asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_meets/interval_meets.13.adm
index 5568195..8cafa72 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_meets/interval_meets.3.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_meets/interval_meets.13.adm
@@ -1,2 +1,3 @@
 { "staff": "Alex", "student": "Tess" }
 { "staff": "Henry", "student": "Tess" }
+{ "staff": "Jake", "student": "Tess" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_meets/interval_meets.14.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_meets/interval_meets.14.adm
new file mode 100644
index 0000000..cd4b3ba
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_meets/interval_meets.14.adm
@@ -0,0 +1,4 @@
+{ "staff": "Alex", "student": "Olga" }
+{ "staff": "Franklin", "student": "Charles" }
+{ "staff": "Franklin", "student": "Frank" }
+{ "staff": "Henry", "student": "Olga" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_meets/interval_meets.3.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_meets/interval_meets.3.adm
index 5568195..8cafa72 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_meets/interval_meets.3.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_meets/interval_meets.3.adm
@@ -1,2 +1,3 @@
 { "staff": "Alex", "student": "Tess" }
 { "staff": "Henry", "student": "Tess" }
+{ "staff": "Jake", "student": "Tess" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_meets/interval_meets.5.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_meets/interval_meets.5.adm
index 5568195..8cafa72 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_meets/interval_meets.5.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_meets/interval_meets.5.adm
@@ -1,2 +1,3 @@
 { "staff": "Alex", "student": "Tess" }
 { "staff": "Henry", "student": "Tess" }
+{ "staff": "Jake", "student": "Tess" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_meets/interval_meets.3.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_meets/interval_meets.7.adm
similarity index 66%
copy from asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_meets/interval_meets.3.adm
copy to asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_meets/interval_meets.7.adm
index 5568195..8cafa72 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_meets/interval_meets.3.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_meets/interval_meets.7.adm
@@ -1,2 +1,3 @@
 { "staff": "Alex", "student": "Tess" }
 { "staff": "Henry", "student": "Tess" }
+{ "staff": "Jake", "student": "Tess" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_meets/interval_meets.8.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_meets/interval_meets.8.adm
new file mode 100644
index 0000000..cd4b3ba
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_meets/interval_meets.8.adm
@@ -0,0 +1,4 @@
+{ "staff": "Alex", "student": "Olga" }
+{ "staff": "Franklin", "student": "Charles" }
+{ "staff": "Franklin", "student": "Frank" }
+{ "staff": "Henry", "student": "Olga" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_meets/interval_meets.3.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_meets/interval_meets.9.adm
similarity index 66%
copy from asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_meets/interval_meets.3.adm
copy to asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_meets/interval_meets.9.adm
index 5568195..8cafa72 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_meets/interval_meets.3.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_meets/interval_meets.9.adm
@@ -1,2 +1,3 @@
 { "staff": "Alex", "student": "Tess" }
 { "staff": "Henry", "student": "Tess" }
+{ "staff": "Jake", "student": "Tess" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_meets/interval_meets.3.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_met_by/interval_met_by.10.adm
similarity index 66%
copy from asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_meets/interval_meets.3.adm
copy to asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_met_by/interval_met_by.10.adm
index 5568195..8cafa72 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_meets/interval_meets.3.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_met_by/interval_met_by.10.adm
@@ -1,2 +1,3 @@
 { "staff": "Alex", "student": "Tess" }
 { "staff": "Henry", "student": "Tess" }
+{ "staff": "Jake", "student": "Tess" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_met_by/interval_met_by.11.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_met_by/interval_met_by.11.adm
new file mode 100644
index 0000000..cd4b3ba
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_met_by/interval_met_by.11.adm
@@ -0,0 +1,4 @@
+{ "staff": "Alex", "student": "Olga" }
+{ "staff": "Franklin", "student": "Charles" }
+{ "staff": "Franklin", "student": "Frank" }
+{ "staff": "Henry", "student": "Olga" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_meets/interval_meets.3.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_met_by/interval_met_by.12.adm
similarity index 66%
copy from asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_meets/interval_meets.3.adm
copy to asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_met_by/interval_met_by.12.adm
index 5568195..8cafa72 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_meets/interval_meets.3.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_met_by/interval_met_by.12.adm
@@ -1,2 +1,3 @@
 { "staff": "Alex", "student": "Tess" }
 { "staff": "Henry", "student": "Tess" }
+{ "staff": "Jake", "student": "Tess" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_met_by/interval_met_by.13.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_met_by/interval_met_by.13.adm
new file mode 100644
index 0000000..cd4b3ba
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_met_by/interval_met_by.13.adm
@@ -0,0 +1,4 @@
+{ "staff": "Alex", "student": "Olga" }
+{ "staff": "Franklin", "student": "Charles" }
+{ "staff": "Franklin", "student": "Frank" }
+{ "staff": "Henry", "student": "Olga" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_meets/interval_meets.3.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_met_by/interval_met_by.14.adm
similarity index 66%
copy from asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_meets/interval_meets.3.adm
copy to asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_met_by/interval_met_by.14.adm
index 5568195..8cafa72 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_meets/interval_meets.3.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_met_by/interval_met_by.14.adm
@@ -1,2 +1,3 @@
 { "staff": "Alex", "student": "Tess" }
 { "staff": "Henry", "student": "Tess" }
+{ "staff": "Jake", "student": "Tess" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_met_by/interval_met_by.4.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_met_by/interval_met_by.4.adm
index 5568195..8cafa72 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_met_by/interval_met_by.4.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_met_by/interval_met_by.4.adm
@@ -1,2 +1,3 @@
 { "staff": "Alex", "student": "Tess" }
 { "staff": "Henry", "student": "Tess" }
+{ "staff": "Jake", "student": "Tess" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_met_by/interval_met_by.6.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_met_by/interval_met_by.6.adm
index 5568195..8cafa72 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_met_by/interval_met_by.6.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_met_by/interval_met_by.6.adm
@@ -1,2 +1,3 @@
 { "staff": "Alex", "student": "Tess" }
 { "staff": "Henry", "student": "Tess" }
+{ "staff": "Jake", "student": "Tess" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_met_by/interval_met_by.7.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_met_by/interval_met_by.7.adm
new file mode 100644
index 0000000..cd4b3ba
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_met_by/interval_met_by.7.adm
@@ -0,0 +1,4 @@
+{ "staff": "Alex", "student": "Olga" }
+{ "staff": "Franklin", "student": "Charles" }
+{ "staff": "Franklin", "student": "Frank" }
+{ "staff": "Henry", "student": "Olga" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_meets/interval_meets.3.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_met_by/interval_met_by.8.adm
similarity index 66%
copy from asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_meets/interval_meets.3.adm
copy to asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_met_by/interval_met_by.8.adm
index 5568195..8cafa72 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_meets/interval_meets.3.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_met_by/interval_met_by.8.adm
@@ -1,2 +1,3 @@
 { "staff": "Alex", "student": "Tess" }
 { "staff": "Henry", "student": "Tess" }
+{ "staff": "Jake", "student": "Tess" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_met_by/interval_met_by.9.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_met_by/interval_met_by.9.adm
new file mode 100644
index 0000000..cd4b3ba
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_met_by/interval_met_by.9.adm
@@ -0,0 +1,4 @@
+{ "staff": "Alex", "student": "Olga" }
+{ "staff": "Franklin", "student": "Charles" }
+{ "staff": "Franklin", "student": "Frank" }
+{ "staff": "Henry", "student": "Olga" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.4.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.10.adm
similarity index 75%
copy from asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.4.adm
copy to asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.10.adm
index 94ac56a..7ab4d4f 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.4.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.10.adm
@@ -4,3 +4,5 @@
 { "staff": "Franklin", "student": "Tess" }
 { "staff": "Henry", "student": "Karen" }
 { "staff": "Henry", "student": "Steve" }
+{ "staff": "Jake", "student": "Karen" }
+{ "staff": "Jake", "student": "Steve" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.11.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.11.adm
new file mode 100644
index 0000000..9e5549f
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.11.adm
@@ -0,0 +1,10 @@
+{ "staff": "Alex", "student": "Charles" }
+{ "staff": "Alex", "student": "Frank" }
+{ "staff": "Alex", "student": "Mary" }
+{ "staff": "Elisabeth", "student": "Charles" }
+{ "staff": "Elisabeth", "student": "Frank" }
+{ "staff": "Elisabeth", "student": "Olga" }
+{ "staff": "Franklin", "student": "Mary" }
+{ "staff": "Henry", "student": "Charles" }
+{ "staff": "Henry", "student": "Frank" }
+{ "staff": "Henry", "student": "Mary" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.4.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.12.adm
similarity index 75%
copy from asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.4.adm
copy to asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.12.adm
index 94ac56a..7ab4d4f 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.4.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.12.adm
@@ -4,3 +4,5 @@
 { "staff": "Franklin", "student": "Tess" }
 { "staff": "Henry", "student": "Karen" }
 { "staff": "Henry", "student": "Steve" }
+{ "staff": "Jake", "student": "Karen" }
+{ "staff": "Jake", "student": "Steve" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.13.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.13.adm
new file mode 100644
index 0000000..9e5549f
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.13.adm
@@ -0,0 +1,10 @@
+{ "staff": "Alex", "student": "Charles" }
+{ "staff": "Alex", "student": "Frank" }
+{ "staff": "Alex", "student": "Mary" }
+{ "staff": "Elisabeth", "student": "Charles" }
+{ "staff": "Elisabeth", "student": "Frank" }
+{ "staff": "Elisabeth", "student": "Olga" }
+{ "staff": "Franklin", "student": "Mary" }
+{ "staff": "Henry", "student": "Charles" }
+{ "staff": "Henry", "student": "Frank" }
+{ "staff": "Henry", "student": "Mary" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.4.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.14.adm
similarity index 75%
copy from asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.4.adm
copy to asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.14.adm
index 94ac56a..7ab4d4f 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.4.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.14.adm
@@ -4,3 +4,5 @@
 { "staff": "Franklin", "student": "Tess" }
 { "staff": "Henry", "student": "Karen" }
 { "staff": "Henry", "student": "Steve" }
+{ "staff": "Jake", "student": "Karen" }
+{ "staff": "Jake", "student": "Steve" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.4.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.4.adm
index 94ac56a..7ab4d4f 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.4.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.4.adm
@@ -4,3 +4,5 @@
 { "staff": "Franklin", "student": "Tess" }
 { "staff": "Henry", "student": "Karen" }
 { "staff": "Henry", "student": "Steve" }
+{ "staff": "Jake", "student": "Karen" }
+{ "staff": "Jake", "student": "Steve" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.6.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.6.adm
index 94ac56a..7ab4d4f 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.6.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.6.adm
@@ -4,3 +4,5 @@
 { "staff": "Franklin", "student": "Tess" }
 { "staff": "Henry", "student": "Karen" }
 { "staff": "Henry", "student": "Steve" }
+{ "staff": "Jake", "student": "Karen" }
+{ "staff": "Jake", "student": "Steve" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.7.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.7.adm
new file mode 100644
index 0000000..9e5549f
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.7.adm
@@ -0,0 +1,10 @@
+{ "staff": "Alex", "student": "Charles" }
+{ "staff": "Alex", "student": "Frank" }
+{ "staff": "Alex", "student": "Mary" }
+{ "staff": "Elisabeth", "student": "Charles" }
+{ "staff": "Elisabeth", "student": "Frank" }
+{ "staff": "Elisabeth", "student": "Olga" }
+{ "staff": "Franklin", "student": "Mary" }
+{ "staff": "Henry", "student": "Charles" }
+{ "staff": "Henry", "student": "Frank" }
+{ "staff": "Henry", "student": "Mary" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.4.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.8.adm
similarity index 75%
copy from asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.4.adm
copy to asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.8.adm
index 94ac56a..7ab4d4f 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.4.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.8.adm
@@ -4,3 +4,5 @@
 { "staff": "Franklin", "student": "Tess" }
 { "staff": "Henry", "student": "Karen" }
 { "staff": "Henry", "student": "Steve" }
+{ "staff": "Jake", "student": "Karen" }
+{ "staff": "Jake", "student": "Steve" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.9.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.9.adm
new file mode 100644
index 0000000..9e5549f
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.9.adm
@@ -0,0 +1,10 @@
+{ "staff": "Alex", "student": "Charles" }
+{ "staff": "Alex", "student": "Frank" }
+{ "staff": "Alex", "student": "Mary" }
+{ "staff": "Elisabeth", "student": "Charles" }
+{ "staff": "Elisabeth", "student": "Frank" }
+{ "staff": "Elisabeth", "student": "Olga" }
+{ "staff": "Franklin", "student": "Mary" }
+{ "staff": "Henry", "student": "Charles" }
+{ "staff": "Henry", "student": "Frank" }
+{ "staff": "Henry", "student": "Mary" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapping/interval_overlapping.3.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapping/interval_overlapping.10.adm
similarity index 86%
copy from asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapping/interval_overlapping.3.adm
copy to asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapping/interval_overlapping.10.adm
index 4ecd143..dc01c06 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapping/interval_overlapping.3.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapping/interval_overlapping.10.adm
@@ -19,9 +19,11 @@
 { "staff": "Henry", "student": "Karen" }
 { "staff": "Henry", "student": "Mary" }
 { "staff": "Henry", "student": "Steve" }
-{ "staff": "Maryann", "student": "Karen" }
-{ "staff": "Maryann", "student": "Steve" }
-{ "staff": "Maryann", "student": "Tess" }
+{ "staff": "Jake", "student": "Karen" }
+{ "staff": "Jake", "student": "Steve" }
+{ "staff": "MaryAnn", "student": "Karen" }
+{ "staff": "MaryAnn", "student": "Steve" }
+{ "staff": "MaryAnn", "student": "Tess" }
 { "staff": "Vicky", "student": "Charles" }
 { "staff": "Vicky", "student": "Frank" }
 { "staff": "Vicky", "student": "Karen" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapping/interval_overlapping.3.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapping/interval_overlapping.11.adm
similarity index 86%
copy from asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapping/interval_overlapping.3.adm
copy to asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapping/interval_overlapping.11.adm
index 4ecd143..dc01c06 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapping/interval_overlapping.3.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapping/interval_overlapping.11.adm
@@ -19,9 +19,11 @@
 { "staff": "Henry", "student": "Karen" }
 { "staff": "Henry", "student": "Mary" }
 { "staff": "Henry", "student": "Steve" }
-{ "staff": "Maryann", "student": "Karen" }
-{ "staff": "Maryann", "student": "Steve" }
-{ "staff": "Maryann", "student": "Tess" }
+{ "staff": "Jake", "student": "Karen" }
+{ "staff": "Jake", "student": "Steve" }
+{ "staff": "MaryAnn", "student": "Karen" }
+{ "staff": "MaryAnn", "student": "Steve" }
+{ "staff": "MaryAnn", "student": "Tess" }
 { "staff": "Vicky", "student": "Charles" }
 { "staff": "Vicky", "student": "Frank" }
 { "staff": "Vicky", "student": "Karen" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapping/interval_overlapping.3.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapping/interval_overlapping.12.adm
similarity index 86%
copy from asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapping/interval_overlapping.3.adm
copy to asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapping/interval_overlapping.12.adm
index 4ecd143..dc01c06 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapping/interval_overlapping.3.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapping/interval_overlapping.12.adm
@@ -19,9 +19,11 @@
 { "staff": "Henry", "student": "Karen" }
 { "staff": "Henry", "student": "Mary" }
 { "staff": "Henry", "student": "Steve" }
-{ "staff": "Maryann", "student": "Karen" }
-{ "staff": "Maryann", "student": "Steve" }
-{ "staff": "Maryann", "student": "Tess" }
+{ "staff": "Jake", "student": "Karen" }
+{ "staff": "Jake", "student": "Steve" }
+{ "staff": "MaryAnn", "student": "Karen" }
+{ "staff": "MaryAnn", "student": "Steve" }
+{ "staff": "MaryAnn", "student": "Tess" }
 { "staff": "Vicky", "student": "Charles" }
 { "staff": "Vicky", "student": "Frank" }
 { "staff": "Vicky", "student": "Karen" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapping/interval_overlapping.3.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapping/interval_overlapping.13.adm
similarity index 86%
copy from asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapping/interval_overlapping.3.adm
copy to asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapping/interval_overlapping.13.adm
index 4ecd143..dc01c06 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapping/interval_overlapping.3.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapping/interval_overlapping.13.adm
@@ -19,9 +19,11 @@
 { "staff": "Henry", "student": "Karen" }
 { "staff": "Henry", "student": "Mary" }
 { "staff": "Henry", "student": "Steve" }
-{ "staff": "Maryann", "student": "Karen" }
-{ "staff": "Maryann", "student": "Steve" }
-{ "staff": "Maryann", "student": "Tess" }
+{ "staff": "Jake", "student": "Karen" }
+{ "staff": "Jake", "student": "Steve" }
+{ "staff": "MaryAnn", "student": "Karen" }
+{ "staff": "MaryAnn", "student": "Steve" }
+{ "staff": "MaryAnn", "student": "Tess" }
 { "staff": "Vicky", "student": "Charles" }
 { "staff": "Vicky", "student": "Frank" }
 { "staff": "Vicky", "student": "Karen" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapping/interval_overlapping.3.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapping/interval_overlapping.14.adm
similarity index 86%
copy from asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapping/interval_overlapping.3.adm
copy to asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapping/interval_overlapping.14.adm
index 4ecd143..dc01c06 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapping/interval_overlapping.3.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapping/interval_overlapping.14.adm
@@ -19,9 +19,11 @@
 { "staff": "Henry", "student": "Karen" }
 { "staff": "Henry", "student": "Mary" }
 { "staff": "Henry", "student": "Steve" }
-{ "staff": "Maryann", "student": "Karen" }
-{ "staff": "Maryann", "student": "Steve" }
-{ "staff": "Maryann", "student": "Tess" }
+{ "staff": "Jake", "student": "Karen" }
+{ "staff": "Jake", "student": "Steve" }
+{ "staff": "MaryAnn", "student": "Karen" }
+{ "staff": "MaryAnn", "student": "Steve" }
+{ "staff": "MaryAnn", "student": "Tess" }
 { "staff": "Vicky", "student": "Charles" }
 { "staff": "Vicky", "student": "Frank" }
 { "staff": "Vicky", "student": "Karen" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapping/interval_overlapping.3.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapping/interval_overlapping.3.adm
index 4ecd143..dc01c06 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapping/interval_overlapping.3.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapping/interval_overlapping.3.adm
@@ -19,9 +19,11 @@
 { "staff": "Henry", "student": "Karen" }
 { "staff": "Henry", "student": "Mary" }
 { "staff": "Henry", "student": "Steve" }
-{ "staff": "Maryann", "student": "Karen" }
-{ "staff": "Maryann", "student": "Steve" }
-{ "staff": "Maryann", "student": "Tess" }
+{ "staff": "Jake", "student": "Karen" }
+{ "staff": "Jake", "student": "Steve" }
+{ "staff": "MaryAnn", "student": "Karen" }
+{ "staff": "MaryAnn", "student": "Steve" }
+{ "staff": "MaryAnn", "student": "Tess" }
 { "staff": "Vicky", "student": "Charles" }
 { "staff": "Vicky", "student": "Frank" }
 { "staff": "Vicky", "student": "Karen" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapping/interval_overlapping.4.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapping/interval_overlapping.4.adm
index 4ecd143..dc01c06 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapping/interval_overlapping.4.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapping/interval_overlapping.4.adm
@@ -19,9 +19,11 @@
 { "staff": "Henry", "student": "Karen" }
 { "staff": "Henry", "student": "Mary" }
 { "staff": "Henry", "student": "Steve" }
-{ "staff": "Maryann", "student": "Karen" }
-{ "staff": "Maryann", "student": "Steve" }
-{ "staff": "Maryann", "student": "Tess" }
+{ "staff": "Jake", "student": "Karen" }
+{ "staff": "Jake", "student": "Steve" }
+{ "staff": "MaryAnn", "student": "Karen" }
+{ "staff": "MaryAnn", "student": "Steve" }
+{ "staff": "MaryAnn", "student": "Tess" }
 { "staff": "Vicky", "student": "Charles" }
 { "staff": "Vicky", "student": "Frank" }
 { "staff": "Vicky", "student": "Karen" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapping/interval_overlapping.5.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapping/interval_overlapping.5.adm
index 4ecd143..dc01c06 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapping/interval_overlapping.5.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapping/interval_overlapping.5.adm
@@ -19,9 +19,11 @@
 { "staff": "Henry", "student": "Karen" }
 { "staff": "Henry", "student": "Mary" }
 { "staff": "Henry", "student": "Steve" }
-{ "staff": "Maryann", "student": "Karen" }
-{ "staff": "Maryann", "student": "Steve" }
-{ "staff": "Maryann", "student": "Tess" }
+{ "staff": "Jake", "student": "Karen" }
+{ "staff": "Jake", "student": "Steve" }
+{ "staff": "MaryAnn", "student": "Karen" }
+{ "staff": "MaryAnn", "student": "Steve" }
+{ "staff": "MaryAnn", "student": "Tess" }
 { "staff": "Vicky", "student": "Charles" }
 { "staff": "Vicky", "student": "Frank" }
 { "staff": "Vicky", "student": "Karen" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapping/interval_overlapping.6.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapping/interval_overlapping.6.adm
index 4ecd143..dc01c06 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapping/interval_overlapping.6.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapping/interval_overlapping.6.adm
@@ -19,9 +19,11 @@
 { "staff": "Henry", "student": "Karen" }
 { "staff": "Henry", "student": "Mary" }
 { "staff": "Henry", "student": "Steve" }
-{ "staff": "Maryann", "student": "Karen" }
-{ "staff": "Maryann", "student": "Steve" }
-{ "staff": "Maryann", "student": "Tess" }
+{ "staff": "Jake", "student": "Karen" }
+{ "staff": "Jake", "student": "Steve" }
+{ "staff": "MaryAnn", "student": "Karen" }
+{ "staff": "MaryAnn", "student": "Steve" }
+{ "staff": "MaryAnn", "student": "Tess" }
 { "staff": "Vicky", "student": "Charles" }
 { "staff": "Vicky", "student": "Frank" }
 { "staff": "Vicky", "student": "Karen" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapping/interval_overlapping.3.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapping/interval_overlapping.7.adm
similarity index 86%
copy from asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapping/interval_overlapping.3.adm
copy to asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapping/interval_overlapping.7.adm
index 4ecd143..dc01c06 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapping/interval_overlapping.3.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapping/interval_overlapping.7.adm
@@ -19,9 +19,11 @@
 { "staff": "Henry", "student": "Karen" }
 { "staff": "Henry", "student": "Mary" }
 { "staff": "Henry", "student": "Steve" }
-{ "staff": "Maryann", "student": "Karen" }
-{ "staff": "Maryann", "student": "Steve" }
-{ "staff": "Maryann", "student": "Tess" }
+{ "staff": "Jake", "student": "Karen" }
+{ "staff": "Jake", "student": "Steve" }
+{ "staff": "MaryAnn", "student": "Karen" }
+{ "staff": "MaryAnn", "student": "Steve" }
+{ "staff": "MaryAnn", "student": "Tess" }
 { "staff": "Vicky", "student": "Charles" }
 { "staff": "Vicky", "student": "Frank" }
 { "staff": "Vicky", "student": "Karen" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapping/interval_overlapping.3.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapping/interval_overlapping.8.adm
similarity index 86%
copy from asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapping/interval_overlapping.3.adm
copy to asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapping/interval_overlapping.8.adm
index 4ecd143..dc01c06 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapping/interval_overlapping.3.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapping/interval_overlapping.8.adm
@@ -19,9 +19,11 @@
 { "staff": "Henry", "student": "Karen" }
 { "staff": "Henry", "student": "Mary" }
 { "staff": "Henry", "student": "Steve" }
-{ "staff": "Maryann", "student": "Karen" }
-{ "staff": "Maryann", "student": "Steve" }
-{ "staff": "Maryann", "student": "Tess" }
+{ "staff": "Jake", "student": "Karen" }
+{ "staff": "Jake", "student": "Steve" }
+{ "staff": "MaryAnn", "student": "Karen" }
+{ "staff": "MaryAnn", "student": "Steve" }
+{ "staff": "MaryAnn", "student": "Tess" }
 { "staff": "Vicky", "student": "Charles" }
 { "staff": "Vicky", "student": "Frank" }
 { "staff": "Vicky", "student": "Karen" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapping/interval_overlapping.3.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapping/interval_overlapping.9.adm
similarity index 86%
copy from asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapping/interval_overlapping.3.adm
copy to asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapping/interval_overlapping.9.adm
index 4ecd143..dc01c06 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapping/interval_overlapping.3.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapping/interval_overlapping.9.adm
@@ -19,9 +19,11 @@
 { "staff": "Henry", "student": "Karen" }
 { "staff": "Henry", "student": "Mary" }
 { "staff": "Henry", "student": "Steve" }
-{ "staff": "Maryann", "student": "Karen" }
-{ "staff": "Maryann", "student": "Steve" }
-{ "staff": "Maryann", "student": "Tess" }
+{ "staff": "Jake", "student": "Karen" }
+{ "staff": "Jake", "student": "Steve" }
+{ "staff": "MaryAnn", "student": "Karen" }
+{ "staff": "MaryAnn", "student": "Steve" }
+{ "staff": "MaryAnn", "student": "Tess" }
 { "staff": "Vicky", "student": "Charles" }
 { "staff": "Vicky", "student": "Frank" }
 { "staff": "Vicky", "student": "Karen" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlaps/interval_overlaps.10.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlaps/interval_overlaps.10.adm
new file mode 100644
index 0000000..9e5549f
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlaps/interval_overlaps.10.adm
@@ -0,0 +1,10 @@
+{ "staff": "Alex", "student": "Charles" }
+{ "staff": "Alex", "student": "Frank" }
+{ "staff": "Alex", "student": "Mary" }
+{ "staff": "Elisabeth", "student": "Charles" }
+{ "staff": "Elisabeth", "student": "Frank" }
+{ "staff": "Elisabeth", "student": "Olga" }
+{ "staff": "Franklin", "student": "Mary" }
+{ "staff": "Henry", "student": "Charles" }
+{ "staff": "Henry", "student": "Frank" }
+{ "staff": "Henry", "student": "Mary" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.4.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlaps/interval_overlaps.11.adm
similarity index 75%
copy from asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.4.adm
copy to asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlaps/interval_overlaps.11.adm
index 94ac56a..7ab4d4f 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.4.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlaps/interval_overlaps.11.adm
@@ -4,3 +4,5 @@
 { "staff": "Franklin", "student": "Tess" }
 { "staff": "Henry", "student": "Karen" }
 { "staff": "Henry", "student": "Steve" }
+{ "staff": "Jake", "student": "Karen" }
+{ "staff": "Jake", "student": "Steve" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlaps/interval_overlaps.12.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlaps/interval_overlaps.12.adm
new file mode 100644
index 0000000..9e5549f
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlaps/interval_overlaps.12.adm
@@ -0,0 +1,10 @@
+{ "staff": "Alex", "student": "Charles" }
+{ "staff": "Alex", "student": "Frank" }
+{ "staff": "Alex", "student": "Mary" }
+{ "staff": "Elisabeth", "student": "Charles" }
+{ "staff": "Elisabeth", "student": "Frank" }
+{ "staff": "Elisabeth", "student": "Olga" }
+{ "staff": "Franklin", "student": "Mary" }
+{ "staff": "Henry", "student": "Charles" }
+{ "staff": "Henry", "student": "Frank" }
+{ "staff": "Henry", "student": "Mary" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.4.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlaps/interval_overlaps.13.adm
similarity index 75%
copy from asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.4.adm
copy to asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlaps/interval_overlaps.13.adm
index 94ac56a..7ab4d4f 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.4.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlaps/interval_overlaps.13.adm
@@ -4,3 +4,5 @@
 { "staff": "Franklin", "student": "Tess" }
 { "staff": "Henry", "student": "Karen" }
 { "staff": "Henry", "student": "Steve" }
+{ "staff": "Jake", "student": "Karen" }
+{ "staff": "Jake", "student": "Steve" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlaps/interval_overlaps.14.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlaps/interval_overlaps.14.adm
new file mode 100644
index 0000000..9e5549f
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlaps/interval_overlaps.14.adm
@@ -0,0 +1,10 @@
+{ "staff": "Alex", "student": "Charles" }
+{ "staff": "Alex", "student": "Frank" }
+{ "staff": "Alex", "student": "Mary" }
+{ "staff": "Elisabeth", "student": "Charles" }
+{ "staff": "Elisabeth", "student": "Frank" }
+{ "staff": "Elisabeth", "student": "Olga" }
+{ "staff": "Franklin", "student": "Mary" }
+{ "staff": "Henry", "student": "Charles" }
+{ "staff": "Henry", "student": "Frank" }
+{ "staff": "Henry", "student": "Mary" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlaps/interval_overlaps.3.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlaps/interval_overlaps.3.adm
index 94ac56a..7ab4d4f 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlaps/interval_overlaps.3.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlaps/interval_overlaps.3.adm
@@ -4,3 +4,5 @@
 { "staff": "Franklin", "student": "Tess" }
 { "staff": "Henry", "student": "Karen" }
 { "staff": "Henry", "student": "Steve" }
+{ "staff": "Jake", "student": "Karen" }
+{ "staff": "Jake", "student": "Steve" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlaps/interval_overlaps.5.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlaps/interval_overlaps.5.adm
index 94ac56a..7ab4d4f 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlaps/interval_overlaps.5.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlaps/interval_overlaps.5.adm
@@ -4,3 +4,5 @@
 { "staff": "Franklin", "student": "Tess" }
 { "staff": "Henry", "student": "Karen" }
 { "staff": "Henry", "student": "Steve" }
+{ "staff": "Jake", "student": "Karen" }
+{ "staff": "Jake", "student": "Steve" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.4.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlaps/interval_overlaps.7.adm
similarity index 75%
copy from asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.4.adm
copy to asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlaps/interval_overlaps.7.adm
index 94ac56a..7ab4d4f 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.4.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlaps/interval_overlaps.7.adm
@@ -4,3 +4,5 @@
 { "staff": "Franklin", "student": "Tess" }
 { "staff": "Henry", "student": "Karen" }
 { "staff": "Henry", "student": "Steve" }
+{ "staff": "Jake", "student": "Karen" }
+{ "staff": "Jake", "student": "Steve" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlaps/interval_overlaps.8.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlaps/interval_overlaps.8.adm
new file mode 100644
index 0000000..9e5549f
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlaps/interval_overlaps.8.adm
@@ -0,0 +1,10 @@
+{ "staff": "Alex", "student": "Charles" }
+{ "staff": "Alex", "student": "Frank" }
+{ "staff": "Alex", "student": "Mary" }
+{ "staff": "Elisabeth", "student": "Charles" }
+{ "staff": "Elisabeth", "student": "Frank" }
+{ "staff": "Elisabeth", "student": "Olga" }
+{ "staff": "Franklin", "student": "Mary" }
+{ "staff": "Henry", "student": "Charles" }
+{ "staff": "Henry", "student": "Frank" }
+{ "staff": "Henry", "student": "Mary" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.4.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlaps/interval_overlaps.9.adm
similarity index 75%
copy from asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.4.adm
copy to asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlaps/interval_overlaps.9.adm
index 94ac56a..7ab4d4f 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlapped_by/interval_overlapped_by.4.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_overlaps/interval_overlaps.9.adm
@@ -4,3 +4,5 @@
 { "staff": "Franklin", "student": "Tess" }
 { "staff": "Henry", "student": "Karen" }
 { "staff": "Henry", "student": "Steve" }
+{ "staff": "Jake", "student": "Karen" }
+{ "staff": "Jake", "student": "Steve" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_started_by/interval_started_by.10.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_started_by/interval_started_by.10.adm
new file mode 100644
index 0000000..54ab54e
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_started_by/interval_started_by.10.adm
@@ -0,0 +1 @@
+{ "staff": "Zack", "student": "Mary" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_started_by/interval_started_by.11.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_started_by/interval_started_by.11.adm
new file mode 100644
index 0000000..6cd921a
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_started_by/interval_started_by.11.adm
@@ -0,0 +1,4 @@
+{ "staff": "Elisabeth", "student": "Mary" }
+{ "staff": "Vicky", "student": "Charles" }
+{ "staff": "Vicky", "student": "Frank" }
+{ "staff": "Vicky", "student": "Olga" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_started_by/interval_started_by.12.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_started_by/interval_started_by.12.adm
new file mode 100644
index 0000000..54ab54e
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_started_by/interval_started_by.12.adm
@@ -0,0 +1 @@
+{ "staff": "Zack", "student": "Mary" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_started_by/interval_started_by.13.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_started_by/interval_started_by.13.adm
new file mode 100644
index 0000000..6cd921a
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_started_by/interval_started_by.13.adm
@@ -0,0 +1,4 @@
+{ "staff": "Elisabeth", "student": "Mary" }
+{ "staff": "Vicky", "student": "Charles" }
+{ "staff": "Vicky", "student": "Frank" }
+{ "staff": "Vicky", "student": "Olga" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_started_by/interval_started_by.14.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_started_by/interval_started_by.14.adm
new file mode 100644
index 0000000..54ab54e
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_started_by/interval_started_by.14.adm
@@ -0,0 +1 @@
+{ "staff": "Zack", "student": "Mary" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_started_by/interval_started_by.7.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_started_by/interval_started_by.7.adm
new file mode 100644
index 0000000..6cd921a
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_started_by/interval_started_by.7.adm
@@ -0,0 +1,4 @@
+{ "staff": "Elisabeth", "student": "Mary" }
+{ "staff": "Vicky", "student": "Charles" }
+{ "staff": "Vicky", "student": "Frank" }
+{ "staff": "Vicky", "student": "Olga" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_started_by/interval_started_by.8.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_started_by/interval_started_by.8.adm
new file mode 100644
index 0000000..54ab54e
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_started_by/interval_started_by.8.adm
@@ -0,0 +1 @@
+{ "staff": "Zack", "student": "Mary" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_started_by/interval_started_by.9.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_started_by/interval_started_by.9.adm
new file mode 100644
index 0000000..6cd921a
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_started_by/interval_started_by.9.adm
@@ -0,0 +1,4 @@
+{ "staff": "Elisabeth", "student": "Mary" }
+{ "staff": "Vicky", "student": "Charles" }
+{ "staff": "Vicky", "student": "Frank" }
+{ "staff": "Vicky", "student": "Olga" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_starts/interval_starts.10.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_starts/interval_starts.10.adm
new file mode 100644
index 0000000..6cd921a
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_starts/interval_starts.10.adm
@@ -0,0 +1,4 @@
+{ "staff": "Elisabeth", "student": "Mary" }
+{ "staff": "Vicky", "student": "Charles" }
+{ "staff": "Vicky", "student": "Frank" }
+{ "staff": "Vicky", "student": "Olga" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_starts/interval_starts.11.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_starts/interval_starts.11.adm
new file mode 100644
index 0000000..54ab54e
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_starts/interval_starts.11.adm
@@ -0,0 +1 @@
+{ "staff": "Zack", "student": "Mary" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_starts/interval_starts.12.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_starts/interval_starts.12.adm
new file mode 100644
index 0000000..6cd921a
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_starts/interval_starts.12.adm
@@ -0,0 +1,4 @@
+{ "staff": "Elisabeth", "student": "Mary" }
+{ "staff": "Vicky", "student": "Charles" }
+{ "staff": "Vicky", "student": "Frank" }
+{ "staff": "Vicky", "student": "Olga" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_starts/interval_starts.13.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_starts/interval_starts.13.adm
new file mode 100644
index 0000000..54ab54e
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_starts/interval_starts.13.adm
@@ -0,0 +1 @@
+{ "staff": "Zack", "student": "Mary" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_starts/interval_starts.14.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_starts/interval_starts.14.adm
new file mode 100644
index 0000000..6cd921a
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_starts/interval_starts.14.adm
@@ -0,0 +1,4 @@
+{ "staff": "Elisabeth", "student": "Mary" }
+{ "staff": "Vicky", "student": "Charles" }
+{ "staff": "Vicky", "student": "Frank" }
+{ "staff": "Vicky", "student": "Olga" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_starts/interval_starts.7.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_starts/interval_starts.7.adm
new file mode 100644
index 0000000..54ab54e
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_starts/interval_starts.7.adm
@@ -0,0 +1 @@
+{ "staff": "Zack", "student": "Mary" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_starts/interval_starts.8.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_starts/interval_starts.8.adm
new file mode 100644
index 0000000..6cd921a
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_starts/interval_starts.8.adm
@@ -0,0 +1,4 @@
+{ "staff": "Elisabeth", "student": "Mary" }
+{ "staff": "Vicky", "student": "Charles" }
+{ "staff": "Vicky", "student": "Frank" }
+{ "staff": "Vicky", "student": "Olga" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_starts/interval_starts.9.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_starts/interval_starts.9.adm
new file mode 100644
index 0000000..54ab54e
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/temporal/interval_joins/interval_starts/interval_starts.9.adm
@@ -0,0 +1 @@
+{ "staff": "Zack", "student": "Mary" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
index 19f5614..58af775 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
@@ -13812,7 +13812,7 @@
         <expected-warn>ASX1107: Unexpected hint: indexnl. "hash" expected at this location</expected-warn>
         <expected-warn>ASX1107: Unexpected hint: hash. "indexnl", "skip-index", "hash-bcast" expected at this location</expected-warn>
         <expected-warn>ASX1107: Unexpected hint: auto. "indexnl", "skip-index" expected at this location</expected-warn>
-        <expected-warn>ASX1107: Unexpected hint: hash. "indexnl", "skip-index" expected at this location</expected-warn>
+        <expected-warn>ASX1107: Unexpected hint: hash. "indexnl", "skip-index", "range" expected at this location</expected-warn>
         <expected-warn>ASX1107: Unexpected hint: hash. None expected at this location</expected-warn>
       </compilation-unit>
     </test-case>
@@ -13835,7 +13835,7 @@
         <expected-warn>ASX1107: Unexpected hint: unknown_hint_groupby. "hash" expected at this location</expected-warn>
         <expected-warn>ASX1107: Unexpected hint: unknown_hint_relexpr. "indexnl", "skip-index", "hash-bcast" expected at this location</expected-warn>
         <expected-warn>ASX1107: Unexpected hint: unknown_hint_between. "indexnl", "skip-index" expected at this location</expected-warn>
-        <expected-warn>ASX1107: Unexpected hint: unknown_hint_funcall. "indexnl", "skip-index" expected at this location</expected-warn>
+        <expected-warn>ASX1107: Unexpected hint: unknown_hint_funcall. "indexnl", "skip-index", "range" expected at this location</expected-warn>
         <expected-warn>ASX1107: Unexpected hint: unknown_hint_elsewhere. None expected at this location</expected-warn>
       </compilation-unit>
     </test-case>
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.1.ddl.sqlpp b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/annotations/RangeAnnotation.java
similarity index 55%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.1.ddl.sqlpp
copy to asterixdb/asterix-common/src/main/java/org/apache/asterix/common/annotations/RangeAnnotation.java
index fdef960..4465167 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.1.ddl.sqlpp
+++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/annotations/RangeAnnotation.java
@@ -16,29 +16,30 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-/*
- * Description      :   Check temporal join functionality for interval
- * Expected Result  :   Success
- * Date             :   26th Jun, 2015
- */
+package org.apache.asterix.common.annotations;
+
+import org.apache.hyracks.algebricks.core.algebra.expressions.IExpressionAnnotation;
+import org.apache.hyracks.dataflow.common.data.partition.range.RangeMap;
+
+public class RangeAnnotation implements IExpressionAnnotation {
+
+    private RangeMap map;
 
-drop dataverse TinyCollege if exists;
-create dataverse TinyCollege;
-use TinyCollege;
+    @Override
+    public Object getObject() {
+        return map;
+    }
 
-create type StaffType as open {
-        name: string,
-        office: string,
-        employment: interval
-};
-create dataset Staff(StaffType)
-primary key name;
+    @Override
+    public void setObject(Object side) {
+        this.map = (RangeMap) side;
+    }
 
+    @Override
+    public IExpressionAnnotation copy() {
+        RangeAnnotation rangAnn = new RangeAnnotation();
+        rangAnn.map = map;
+        return rangAnn;
+    }
 
-create type StudentType as open {
-        name: string,
-        office: string,
-        attendance: interval
-};
-create dataset Students(StudentType)
-primary key name;
+}
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj b/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj
index d2c851f..e23ea59 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj
+++ b/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj
@@ -59,6 +59,7 @@ import org.apache.asterix.common.annotations.IRecordFieldDataGen;
 import org.apache.asterix.common.annotations.InsertRandIntDataGen;
 import org.apache.asterix.common.annotations.ListDataGen;
 import org.apache.asterix.common.annotations.ListValFileDataGen;
+import org.apache.asterix.common.annotations.RangeAnnotation;
 import org.apache.asterix.common.annotations.SkipSecondaryIndexSearchExpressionAnnotation;
 import org.apache.asterix.common.annotations.TypeDataGen;
 import org.apache.asterix.common.annotations.UndeclaredFieldsDataGen;
@@ -263,7 +264,7 @@ class SQLPPParser extends ScopeChecker implements IParser {
        public DataverseName dataverse;
        public String library;
        public String function;
-       public SqlppHint hint;
+       public Token hintToken;
        public SourceLocation sourceLoc;
     }
 
@@ -2286,19 +2287,19 @@ UnorderedListTypeDefinition UnorderedListTypeDef(boolean allowRecordTypeDef) thr
 
 FunctionName FunctionName() throws ParseException:
 {
-  Triple<List<String>, SourceLocation, SqlppHint> prefix = null;
+  Triple<List<String>, SourceLocation, Token> prefix = null;
   String suffix = null;
 }
 {
   // Note: there's a copy of this production in PrimaryExpr() (LOOKAHEAD for FunctionCallExpr())
   //       that copy must be kept in sync with this code
   prefix = MultipartIdentifierWithHints(SqlppHint.INDEXED_NESTED_LOOP_JOIN_HINT,
-    SqlppHint.SKIP_SECONDARY_INDEX_SEARCH_HINT)
+    SqlppHint.SKIP_SECONDARY_INDEX_SEARCH_HINT, SqlppHint.RANGE_HINT)
   (<SHARP> suffix = Identifier())?
   {
     FunctionName result = new FunctionName();
     result.sourceLoc = prefix.second;
-    result.hint = prefix.third;
+    result.hintToken = prefix.third;
     List<String> list = prefix.first;
     int ln = list.size();
     String last = list.get(ln - 1);
@@ -2442,7 +2443,7 @@ String StringLiteral() throws ParseException:
 
 List<String> MultipartIdentifier() throws ParseException:
 {
-  Triple<List<String>, SourceLocation, SqlppHint> result = null;
+  Triple<List<String>, SourceLocation, Token> result = null;
 }
 {
   result = MultipartIdentifierWithHints(null)
@@ -2451,12 +2452,12 @@ List<String> MultipartIdentifier() throws ParseException:
   }
 }
 
-Triple<List<String>, SourceLocation, SqlppHint> MultipartIdentifierWithHints(SqlppHint... expectedHints)
+Triple<List<String>, SourceLocation, Token> MultipartIdentifierWithHints(SqlppHint... expectedHints)
   throws ParseException:
 {
   List<String> list = new ArrayList<String>();
   SourceLocation sourceLoc = null;
-  SqlppHint hint = null;
+  Token hint = null;
   String item = null;
 }
 {
@@ -2465,15 +2466,12 @@ Triple<List<String>, SourceLocation, SqlppHint> MultipartIdentifierWithHints(Sql
     list.add(item);
     sourceLoc = getSourceLocation(token);
     if (expectedHints != null && expectedHints.length > 0) {
-      Token hintToken = fetchHint(token, expectedHints);
-      if (hintToken != null) {
-        hint = hintToken.hint;
-      }
+      hint = fetchHint(token, expectedHints);
     }
   }
   (<DOT> item = Identifier() { list.add(item); } )*
   {
-    return new Triple<List<String>, SourceLocation, SqlppHint>(list, sourceLoc, hint);
+    return new Triple<List<String>, SourceLocation, Token>(list, sourceLoc, hint);
   }
 }
 
@@ -3442,14 +3440,27 @@ Expression FunctionCallExpr() throws ParseException:
       return windowExpr;
     } else {
       CallExpr callExpr = new CallExpr(signature, argList, filterExpr);
-      if (funcName.hint != null) {
-        switch (funcName.hint) {
+      if (funcName.hintToken != null) {
+        switch (funcName.hintToken.hint) {
           case INDEXED_NESTED_LOOP_JOIN_HINT:
             callExpr.addHint(IndexedNLJoinExpressionAnnotation.INSTANCE);
             break;
           case SKIP_SECONDARY_INDEX_SEARCH_HINT:
             callExpr.addHint(SkipSecondaryIndexSearchExpressionAnnotation.INSTANCE);
             break;
+          case RANGE_HINT:
+            try {
+              RangeAnnotation rangeAnn = new RangeAnnotation();
+              rangeAnn.setObject((Object) RangeMapBuilder.parseHint(parseExpression(funcName.hintToken.hintParams)));
+              callExpr.addHint(rangeAnn);
+            } catch (CompilationException e) {
+              {
+                  SqlppParseException e2 = new SqlppParseException(getSourceLocation(funcName.hintToken), e.getMessage());
+                  e2.initCause(e);
+                  throw e2;
+              }
+            }
+            break;
         }
       }
       FunctionMapUtil.normalizedListInputFunctions(callExpr);
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/IntervalLogic.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/IntervalLogic.java
index 2178b48..58495e8 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/IntervalLogic.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/IntervalLogic.java
@@ -25,7 +25,7 @@ import org.apache.hyracks.api.dataflow.value.IBinaryComparator;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
 
-class IntervalLogic {
+public class IntervalLogic {
 
     private final IBinaryComparator comp;
     private final ArrayBackedValueStorage s1 = new ArrayBackedValueStorage();
@@ -33,7 +33,7 @@ class IntervalLogic {
     private final ArrayBackedValueStorage s2 = new ArrayBackedValueStorage();
     private final ArrayBackedValueStorage e2 = new ArrayBackedValueStorage();
 
-    IntervalLogic() {
+    public IntervalLogic() {
         comp = BinaryComparatorFactoryProvider.INSTANCE
                 .getBinaryComparatorFactory(BuiltinType.ANY, BuiltinType.ANY, true).createBinaryComparator();
     }
@@ -47,7 +47,7 @@ class IntervalLogic {
      * @throws HyracksDataException IOException
      * @see #after(AIntervalPointable, AIntervalPointable)
      */
-    boolean before(AIntervalPointable ip1, AIntervalPointable ip2) throws HyracksDataException {
+    public boolean before(AIntervalPointable ip1, AIntervalPointable ip2) throws HyracksDataException {
         e1.reset();
         s2.reset();
         ip1.getTaggedEnd(e1.getDataOutput());
@@ -56,7 +56,7 @@ class IntervalLogic {
                 s2.getStartOffset(), s2.getLength()) < 0;
     }
 
-    boolean after(AIntervalPointable ip1, AIntervalPointable ip2) throws HyracksDataException {
+    public boolean after(AIntervalPointable ip1, AIntervalPointable ip2) throws HyracksDataException {
         return before(ip2, ip1);
     }
 
@@ -69,7 +69,7 @@ class IntervalLogic {
      * @throws HyracksDataException IOException
      * @see #metBy(AIntervalPointable, AIntervalPointable)
      */
-    boolean meets(AIntervalPointable ip1, AIntervalPointable ip2) throws HyracksDataException {
+    public boolean meets(AIntervalPointable ip1, AIntervalPointable ip2) throws HyracksDataException {
         e1.reset();
         s2.reset();
         ip1.getTaggedEnd(e1.getDataOutput());
@@ -78,7 +78,7 @@ class IntervalLogic {
                 s2.getStartOffset(), s2.getLength()) == 0;
     }
 
-    boolean metBy(AIntervalPointable ip1, AIntervalPointable ip2) throws HyracksDataException {
+    public boolean metBy(AIntervalPointable ip1, AIntervalPointable ip2) throws HyracksDataException {
         return meets(ip2, ip1);
     }
 
@@ -91,7 +91,7 @@ class IntervalLogic {
      * @throws HyracksDataException IOException
      * @see #overlappedBy(AIntervalPointable, AIntervalPointable)
      */
-    boolean overlaps(AIntervalPointable ip1, AIntervalPointable ip2) throws HyracksDataException {
+    public boolean overlaps(AIntervalPointable ip1, AIntervalPointable ip2) throws HyracksDataException {
         s1.reset();
         e1.reset();
         s2.reset();
@@ -108,7 +108,7 @@ class IntervalLogic {
                         e2.getStartOffset(), e2.getLength()) < 0;
     }
 
-    boolean overlappedBy(AIntervalPointable ip1, AIntervalPointable ip2) throws HyracksDataException {
+    public boolean overlappedBy(AIntervalPointable ip1, AIntervalPointable ip2) throws HyracksDataException {
         return overlaps(ip2, ip1);
     }
 
@@ -120,7 +120,7 @@ class IntervalLogic {
      * @throws HyracksDataException IOException
      * @return boolean
      */
-    boolean overlapping(AIntervalPointable ip1, AIntervalPointable ip2) throws HyracksDataException {
+    public boolean overlapping(AIntervalPointable ip1, AIntervalPointable ip2) throws HyracksDataException {
         s1.reset();
         e1.reset();
         s2.reset();
@@ -144,7 +144,7 @@ class IntervalLogic {
      * @throws HyracksDataException IOException
      * @see #startedBy(AIntervalPointable, AIntervalPointable)
      */
-    boolean starts(AIntervalPointable ip1, AIntervalPointable ip2) throws HyracksDataException {
+    public boolean starts(AIntervalPointable ip1, AIntervalPointable ip2) throws HyracksDataException {
         s1.reset();
         e1.reset();
         s2.reset();
@@ -159,7 +159,7 @@ class IntervalLogic {
                         e2.getStartOffset(), e2.getLength()) <= 0;
     }
 
-    boolean startedBy(AIntervalPointable ip1, AIntervalPointable ip2) throws HyracksDataException {
+    public boolean startedBy(AIntervalPointable ip1, AIntervalPointable ip2) throws HyracksDataException {
         return starts(ip2, ip1);
     }
 
@@ -172,7 +172,7 @@ class IntervalLogic {
      * @throws HyracksDataException IOException
      * @see #coveredBy(AIntervalPointable, AIntervalPointable)
      */
-    boolean covers(AIntervalPointable ip1, AIntervalPointable ip2) throws HyracksDataException {
+    public boolean covers(AIntervalPointable ip1, AIntervalPointable ip2) throws HyracksDataException {
         s1.reset();
         e1.reset();
         s2.reset();
@@ -187,7 +187,7 @@ class IntervalLogic {
                         e2.getStartOffset(), e2.getLength()) >= 0;
     }
 
-    boolean coveredBy(AIntervalPointable ip1, AIntervalPointable ip2) throws HyracksDataException {
+    public boolean coveredBy(AIntervalPointable ip1, AIntervalPointable ip2) throws HyracksDataException {
         return covers(ip2, ip1);
     }
 
@@ -200,7 +200,7 @@ class IntervalLogic {
      * @throws HyracksDataException IOException
      * @see #endedBy(AIntervalPointable, AIntervalPointable)
      */
-    boolean ends(AIntervalPointable ip1, AIntervalPointable ip2) throws HyracksDataException {
+    public boolean ends(AIntervalPointable ip1, AIntervalPointable ip2) throws HyracksDataException {
         s1.reset();
         e1.reset();
         s2.reset();
@@ -215,7 +215,7 @@ class IntervalLogic {
                         e2.getStartOffset(), e2.getLength()) == 0;
     }
 
-    boolean endedBy(AIntervalPointable ip1, AIntervalPointable ip2) throws HyracksDataException {
+    public boolean endedBy(AIntervalPointable ip1, AIntervalPointable ip2) throws HyracksDataException {
         return ends(ip2, ip1);
     }
 }
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/interval/IntervalMergeJoinOperatorDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/interval/IntervalMergeJoinOperatorDescriptor.java
new file mode 100644
index 0000000..f28faf1
--- /dev/null
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/interval/IntervalMergeJoinOperatorDescriptor.java
@@ -0,0 +1,186 @@
+/*
+ * 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.
+ */
+
+package org.apache.asterix.runtime.operators.joins.interval;
+
+import java.nio.ByteBuffer;
+
+import org.apache.asterix.runtime.operators.joins.interval.utils.IIntervalJoinUtil;
+import org.apache.asterix.runtime.operators.joins.interval.utils.IIntervalJoinUtilFactory;
+import org.apache.hyracks.api.context.IHyracksTaskContext;
+import org.apache.hyracks.api.dataflow.ActivityId;
+import org.apache.hyracks.api.dataflow.IActivity;
+import org.apache.hyracks.api.dataflow.IActivityGraphBuilder;
+import org.apache.hyracks.api.dataflow.IOperatorNodePushable;
+import org.apache.hyracks.api.dataflow.TaskId;
+import org.apache.hyracks.api.dataflow.value.IRecordDescriptorProvider;
+import org.apache.hyracks.api.dataflow.value.RecordDescriptor;
+import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.job.IOperatorDescriptorRegistry;
+import org.apache.hyracks.api.job.JobId;
+import org.apache.hyracks.dataflow.common.comm.util.FrameUtils;
+import org.apache.hyracks.dataflow.std.base.AbstractActivityNode;
+import org.apache.hyracks.dataflow.std.base.AbstractOperatorDescriptor;
+import org.apache.hyracks.dataflow.std.base.AbstractStateObject;
+import org.apache.hyracks.dataflow.std.base.AbstractUnaryInputSinkOperatorNodePushable;
+import org.apache.hyracks.dataflow.std.base.AbstractUnaryInputUnaryOutputOperatorNodePushable;
+
+public class IntervalMergeJoinOperatorDescriptor extends AbstractOperatorDescriptor {
+    private static final long serialVersionUID = 1L;
+
+    private static final int JOIN_BUILD_ACTIVITY_ID = 0;
+    private static final int JOIN_PROBE_ACTIVITY_ID = 1;
+    private final int[] leftKeys;
+    private final int[] rightKeys;
+    private final int memoryForJoin;
+    private final IIntervalJoinUtilFactory imjcf;
+
+    private final int probeKey;
+    private final int buildKey;
+
+    public IntervalMergeJoinOperatorDescriptor(IOperatorDescriptorRegistry spec, int memoryForJoin, int[] leftKeys,
+            int[] rightKeys, RecordDescriptor recordDescriptor, IIntervalJoinUtilFactory imjcf) {
+        super(spec, 2, 1);
+        outRecDescs[0] = recordDescriptor;
+        this.buildKey = leftKeys[0];
+        this.probeKey = rightKeys[0];
+        this.leftKeys = leftKeys;
+        this.rightKeys = rightKeys;
+        this.memoryForJoin = memoryForJoin;
+        this.imjcf = imjcf;
+    }
+
+    @Override
+    public void contributeActivities(IActivityGraphBuilder builder) {
+        ActivityId buildAid = new ActivityId(odId, JOIN_BUILD_ACTIVITY_ID);
+        ActivityId probeAid = new ActivityId(odId, JOIN_PROBE_ACTIVITY_ID);
+
+        IActivity probeAN = new JoinProbeActivityNode(probeAid);
+        IActivity buildAN = new JoinBuildActivityNode(buildAid, probeAid);
+
+        builder.addActivity(this, buildAN);
+        builder.addSourceEdge(0, buildAN, 0);
+
+        builder.addActivity(this, probeAN);
+        builder.addSourceEdge(1, probeAN, 0);
+        builder.addTargetEdge(0, probeAN, 0);
+        builder.addBlockingEdge(buildAN, probeAN);
+    }
+
+    public static class JoinCacheTaskState extends AbstractStateObject {
+        private IntervalMergeJoiner joiner;
+
+        private JoinCacheTaskState(JobId jobId, TaskId taskId) {
+            super(jobId, taskId);
+        }
+    }
+
+    private class JoinBuildActivityNode extends AbstractActivityNode {
+        private static final long serialVersionUID = 1L;
+
+        private final ActivityId nljAid;
+
+        public JoinBuildActivityNode(ActivityId id, ActivityId nljAid) {
+            super(id);
+            this.nljAid = nljAid;
+        }
+
+        @Override
+        public IOperatorNodePushable createPushRuntime(final IHyracksTaskContext ctx,
+                IRecordDescriptorProvider recordDescProvider, final int partition, int nPartitions) {
+            final RecordDescriptor rd0 = recordDescProvider.getInputRecordDescriptor(nljAid, 0);
+            final RecordDescriptor rd1 = recordDescProvider.getInputRecordDescriptor(getActivityId(), 0);
+
+            return new AbstractUnaryInputSinkOperatorNodePushable() {
+                private JoinCacheTaskState state;
+
+                @Override
+                public void open() throws HyracksDataException {
+                    state = new JoinCacheTaskState(ctx.getJobletContext().getJobId(),
+                            new TaskId(getActivityId(), partition));
+
+                    IIntervalJoinUtil imjc =
+                            imjcf.createIntervalMergeJoinChecker(leftKeys, rightKeys, ctx, nPartitions);
+
+                    state.joiner = new IntervalMergeJoiner(ctx, memoryForJoin, imjc, buildKey, probeKey, rd0, rd1);
+                }
+
+                @Override
+                public void nextFrame(ByteBuffer buffer) throws HyracksDataException {
+                    ByteBuffer copyBuffer = ctx.allocateFrame(buffer.capacity());
+                    FrameUtils.copyAndFlip(buffer, copyBuffer);
+                    state.joiner.processBuildFrame(copyBuffer);
+                }
+
+                @Override
+                public void close() throws HyracksDataException {
+                    state.joiner.processBuildClose();
+                    ctx.setStateObject(state);
+                }
+
+                @Override
+                public void fail() {
+                    // No variables to update.
+                }
+            };
+        }
+    }
+
+    private class JoinProbeActivityNode extends AbstractActivityNode {
+        private static final long serialVersionUID = 1L;
+
+        public JoinProbeActivityNode(ActivityId id) {
+            super(id);
+        }
+
+        @Override
+        public IOperatorNodePushable createPushRuntime(final IHyracksTaskContext ctx,
+                IRecordDescriptorProvider recordDescProvider, final int partition, int nPartitions) {
+            return new AbstractUnaryInputUnaryOutputOperatorNodePushable() {
+                private JoinCacheTaskState state;
+
+                @Override
+                public void open() throws HyracksDataException {
+                    writer.open();
+                    state = (JoinCacheTaskState) ctx.getStateObject(
+                            new TaskId(new ActivityId(getOperatorId(), JOIN_BUILD_ACTIVITY_ID), partition));
+                }
+
+                @Override
+                public void nextFrame(ByteBuffer buffer) throws HyracksDataException {
+                    state.joiner.processProbeFrame(buffer, writer);
+                }
+
+                @Override
+                public void close() throws HyracksDataException {
+                    try {
+                        state.joiner.processProbeClose(writer);
+                    } finally {
+                        writer.close();
+                    }
+                }
+
+                @Override
+                public void fail() throws HyracksDataException {
+                    writer.fail();
+                }
+            };
+        }
+    }
+}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/interval/IntervalMergeJoiner.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/interval/IntervalMergeJoiner.java
new file mode 100644
index 0000000..13d8c25
--- /dev/null
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/interval/IntervalMergeJoiner.java
@@ -0,0 +1,264 @@
+/*
+ * 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.
+ */
+package org.apache.asterix.runtime.operators.joins.interval;
+
+import java.nio.ByteBuffer;
+import java.util.Iterator;
+import java.util.LinkedList;
+
+import org.apache.asterix.runtime.operators.joins.interval.utils.IIntervalJoinUtil;
+import org.apache.asterix.runtime.operators.joins.interval.utils.memory.ITupleAccessor;
+import org.apache.asterix.runtime.operators.joins.interval.utils.memory.IntervalSideTuple;
+import org.apache.asterix.runtime.operators.joins.interval.utils.memory.IntervalVariableDeletableTupleMemoryManager;
+import org.apache.asterix.runtime.operators.joins.interval.utils.memory.RunFilePointer;
+import org.apache.asterix.runtime.operators.joins.interval.utils.memory.RunFileStream;
+import org.apache.asterix.runtime.operators.joins.interval.utils.memory.TupleAccessor;
+import org.apache.hyracks.api.comm.IFrame;
+import org.apache.hyracks.api.comm.IFrameTupleAccessor;
+import org.apache.hyracks.api.comm.IFrameWriter;
+import org.apache.hyracks.api.comm.VSizeFrame;
+import org.apache.hyracks.api.context.IHyracksTaskContext;
+import org.apache.hyracks.api.dataflow.value.RecordDescriptor;
+import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.dataflow.common.comm.io.FrameTupleAppender;
+import org.apache.hyracks.dataflow.common.comm.util.FrameUtils;
+import org.apache.hyracks.dataflow.std.buffermanager.DeallocatableFramePool;
+import org.apache.hyracks.dataflow.std.buffermanager.IDeallocatableFramePool;
+import org.apache.hyracks.dataflow.std.buffermanager.IDeletableTupleBufferManager;
+import org.apache.hyracks.dataflow.std.structures.TuplePointer;
+
+/**
+ * Merge Joiner takes two sorted streams of input and joins.
+ * The two sorted streams must be in a logical order and the comparator must
+ * support keeping that order so the join will work.
+ * The left stream will spill to disk when memory is full.
+ * The right stream spills to memory and pause when memory is full.
+ */
+public class IntervalMergeJoiner {
+
+    public enum TupleStatus {
+        LOADED,
+        EMPTY;
+
+        public boolean isLoaded() {
+            return this.equals(LOADED);
+        }
+
+        public boolean isEmpty() {
+            return this.equals(EMPTY);
+        }
+    }
+
+    private final IDeallocatableFramePool framePool;
+    private final IDeletableTupleBufferManager bufferManager;
+    private final ITupleAccessor memoryAccessor;
+    private final LinkedList<TuplePointer> memoryBuffer = new LinkedList<>();
+
+    private final RunFileStream runFileStream;
+    private final RunFilePointer runFilePointer;
+
+    private IntervalSideTuple memoryTuple;
+    private IntervalSideTuple[] inputTuple;
+
+    private final IIntervalJoinUtil mjc;
+
+    protected static final int JOIN_PARTITIONS = 2;
+    protected static final int BUILD_PARTITION = 0;
+    protected static final int PROBE_PARTITION = 1;
+
+    protected final IFrame[] inputBuffer;
+    protected final FrameTupleAppender resultAppender;
+    protected final ITupleAccessor[] inputAccessor;
+
+    protected long[] frameCounts = { 0, 0 };
+    protected long[] tupleCounts = { 0, 0 };
+
+    public IntervalMergeJoiner(IHyracksTaskContext ctx, int memorySize, IIntervalJoinUtil mjc, int buildKeys,
+            int probeKeys, RecordDescriptor buildRd, RecordDescriptor probeRd) throws HyracksDataException {
+        this.mjc = mjc;
+
+        // Memory (probe buffer)
+        if (memorySize < 1) {
+            throw new HyracksDataException(
+                    "MergeJoiner does not have enough memory (needs > 0, got " + memorySize + ").");
+        }
+
+        inputAccessor = new TupleAccessor[JOIN_PARTITIONS];
+        inputAccessor[BUILD_PARTITION] = new TupleAccessor(buildRd);
+        inputAccessor[PROBE_PARTITION] = new TupleAccessor(probeRd);
+
+        inputBuffer = new IFrame[JOIN_PARTITIONS];
+        inputBuffer[BUILD_PARTITION] = new VSizeFrame(ctx);
+        inputBuffer[PROBE_PARTITION] = new VSizeFrame(ctx);
+
+        framePool = new DeallocatableFramePool(ctx, (memorySize) * ctx.getInitialFrameSize());
+        bufferManager = new IntervalVariableDeletableTupleMemoryManager(framePool, probeRd);
+        memoryAccessor = ((IntervalVariableDeletableTupleMemoryManager) bufferManager).createTupleAccessor();
+
+        // Run File and frame cache (build buffer)
+        runFileStream = new RunFileStream(ctx, "ismj-left");
+        runFilePointer = new RunFilePointer();
+        runFileStream.createRunFileWriting();
+        runFileStream.startRunFileWriting();
+
+        memoryTuple = new IntervalSideTuple(mjc, memoryAccessor, probeKeys);
+
+        inputTuple = new IntervalSideTuple[JOIN_PARTITIONS];
+        inputTuple[PROBE_PARTITION] = new IntervalSideTuple(mjc, inputAccessor[PROBE_PARTITION], probeKeys);
+        inputTuple[BUILD_PARTITION] = new IntervalSideTuple(mjc, inputAccessor[BUILD_PARTITION], buildKeys);
+
+        // Result
+        this.resultAppender = new FrameTupleAppender(new VSizeFrame(ctx));
+    }
+
+    public void processBuildFrame(ByteBuffer buffer) throws HyracksDataException {
+        inputAccessor[BUILD_PARTITION].reset(buffer);
+        for (int x = 0; x < inputAccessor[BUILD_PARTITION].getTupleCount(); x++) {
+            runFileStream.addToRunFile(inputAccessor[BUILD_PARTITION], x);
+        }
+    }
+
+    public void processBuildClose() throws HyracksDataException {
+        runFileStream.flushRunFile();
+        runFileStream.startReadingRunFile(inputAccessor[BUILD_PARTITION]);
+    }
+
+    public void processProbeFrame(ByteBuffer buffer, IFrameWriter writer) throws HyracksDataException {
+        inputAccessor[PROBE_PARTITION].reset(buffer);
+        inputAccessor[PROBE_PARTITION].next();
+
+        TupleStatus buildTs = loadBuildTuple();
+        TupleStatus probeTs = loadProbeTuple();
+        while (buildTs.isLoaded() && (probeTs.isLoaded() || memoryHasTuples())) {
+            if (probeTs.isLoaded()) {
+                // Right side from stream
+                processProbeTuple(writer);
+                probeTs = loadProbeTuple();
+            } else {
+                // Left side from stream
+                processBuildTuple(writer);
+                buildTs = loadBuildTuple();
+            }
+        }
+    }
+
+    public void processProbeClose(IFrameWriter writer) throws HyracksDataException {
+        resultAppender.write(writer, true);
+        runFileStream.close();
+        runFileStream.removeRunFile();
+    }
+
+    private TupleStatus loadProbeTuple() {
+        TupleStatus loaded;
+        if (inputAccessor[PROBE_PARTITION] != null && inputAccessor[PROBE_PARTITION].exists()) {
+            // Still processing frame.
+            loaded = TupleStatus.LOADED;
+        } else {
+            // No more frames or tuples to process.
+            loaded = TupleStatus.EMPTY;
+        }
+        return loaded;
+    }
+
+    private TupleStatus loadBuildTuple() throws HyracksDataException {
+        if (!inputAccessor[BUILD_PARTITION].exists()) {
+            // Must keep condition in a separate if due to actions applied in loadNextBuffer.
+            if (!runFileStream.loadNextBuffer(inputAccessor[BUILD_PARTITION])) {
+                return TupleStatus.EMPTY;
+            }
+        }
+        return TupleStatus.LOADED;
+    }
+
+    private void processBuildTuple(IFrameWriter writer) throws HyracksDataException {
+        // Check against memory
+        if (memoryHasTuples()) {
+            inputTuple[BUILD_PARTITION].loadTuple();
+            Iterator<TuplePointer> memoryIterator = memoryBuffer.iterator();
+            while (memoryIterator.hasNext()) {
+                TuplePointer tp = memoryIterator.next();
+                memoryTuple.setTuple(tp);
+                if (inputTuple[BUILD_PARTITION].removeFromMemory(memoryTuple)) {
+                    // remove from memory
+                    bufferManager.deleteTuple(tp);
+                    memoryIterator.remove();
+                    continue;
+                } else if (inputTuple[BUILD_PARTITION].checkForEarlyExit(memoryTuple)) {
+                    // No more possible comparisons
+                    break;
+                } else if (inputTuple[BUILD_PARTITION].compareJoin(memoryTuple)) {
+                    // add to result
+                    addToResult(inputAccessor[BUILD_PARTITION], inputAccessor[BUILD_PARTITION].getTupleId(),
+                            memoryAccessor, tp.getTupleIndex(), writer);
+                }
+            }
+        }
+        inputAccessor[BUILD_PARTITION].next();
+    }
+
+    private void processProbeTuple(IFrameWriter writer) throws HyracksDataException {
+        // append to memory
+        if (mjc.checkToSaveInMemory(inputAccessor[BUILD_PARTITION], inputAccessor[BUILD_PARTITION].getTupleId(),
+                inputAccessor[PROBE_PARTITION], inputAccessor[PROBE_PARTITION].getTupleId())) {
+            if (!addToMemory(inputAccessor[PROBE_PARTITION])) {
+                unfreezeAndClearMemory(writer, inputAccessor[BUILD_PARTITION]);
+                return;
+            }
+        }
+        inputAccessor[PROBE_PARTITION].next();
+    }
+
+    private void unfreezeAndClearMemory(IFrameWriter writer, ITupleAccessor accessor) throws HyracksDataException {
+        runFilePointer.reset(runFileStream.getReadPointer(), inputAccessor[BUILD_PARTITION].getTupleId());
+        TupleStatus buildTs = loadBuildTuple();
+        while (buildTs.isLoaded() && memoryHasTuples()) {
+            // Left side from stream
+            processBuildTuple(writer);
+            buildTs = loadBuildTuple();
+        }
+        // Finish writing
+        runFileStream.flushRunFile();
+        // Clear memory
+        memoryBuffer.clear();
+        bufferManager.reset();
+        // Start reading
+        runFileStream.startReadingRunFile(accessor, runFilePointer.getFileOffset());
+        accessor.setTupleId(runFilePointer.getTupleIndex());
+        runFilePointer.reset(-1, -1);
+    }
+
+    private boolean addToMemory(ITupleAccessor accessor) throws HyracksDataException {
+        TuplePointer tp = new TuplePointer();
+        if (bufferManager.insertTuple(accessor, accessor.getTupleId(), tp)) {
+            memoryBuffer.add(tp);
+            return true;
+        }
+        return false;
+    }
+
+    private void addToResult(IFrameTupleAccessor accessorLeft, int leftTupleIndex, IFrameTupleAccessor accessorRight,
+            int rightTupleIndex, IFrameWriter writer) throws HyracksDataException {
+        FrameUtils.appendConcatToWriter(writer, resultAppender, accessorLeft, leftTupleIndex, accessorRight,
+                rightTupleIndex);
+    }
+
+    private boolean memoryHasTuples() {
+        return bufferManager.getNumTuples() > 0;
+    }
+}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/interval/utils/AbstractIntervalInverseJoinUtil.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/interval/utils/AbstractIntervalInverseJoinUtil.java
new file mode 100644
index 0000000..7830b0c
--- /dev/null
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/interval/utils/AbstractIntervalInverseJoinUtil.java
@@ -0,0 +1,52 @@
+/*
+ * 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.
+ */
+package org.apache.asterix.runtime.operators.joins.interval.utils;
+
+import org.apache.asterix.runtime.operators.joins.interval.utils.memory.IntervalJoinUtil;
+import org.apache.hyracks.api.comm.IFrameTupleAccessor;
+
+public abstract class AbstractIntervalInverseJoinUtil extends AbstractIntervalJoinUtil {
+
+    public AbstractIntervalInverseJoinUtil(int idLeft, int idRight) {
+        super(idLeft, idRight);
+    }
+
+    /**
+     * Right (second argument) interval starts before left (first argument) interval ends.
+     */
+    @Override
+    public boolean checkToSaveInMemory(IFrameTupleAccessor accessorLeft, int leftTupleIndex,
+            IFrameTupleAccessor accessorRight, int rightTupleIndex) {
+        long start0 = IntervalJoinUtil.getIntervalStart(accessorLeft, leftTupleIndex, idLeft);
+        long end1 = IntervalJoinUtil.getIntervalEnd(accessorRight, rightTupleIndex, idRight);
+        return start0 < end1;
+    }
+
+    /**
+     * Left (first argument) interval starts after the Right (second argument) interval ends.
+     */
+    @Override
+    public boolean checkToRemoveInMemory(IFrameTupleAccessor accessorLeft, int leftTupleIndex,
+            IFrameTupleAccessor accessorRight, int rightTupleIndex) {
+        long start0 = IntervalJoinUtil.getIntervalStart(accessorLeft, leftTupleIndex, idLeft);
+        long end1 = IntervalJoinUtil.getIntervalEnd(accessorRight, rightTupleIndex, idRight);
+        return start0 >= end1;
+    }
+
+}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/interval/utils/AbstractIntervalJoinUtil.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/interval/utils/AbstractIntervalJoinUtil.java
new file mode 100644
index 0000000..da50ab2
--- /dev/null
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/interval/utils/AbstractIntervalJoinUtil.java
@@ -0,0 +1,115 @@
+/*
+ * 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.
+ */
+package org.apache.asterix.runtime.operators.joins.interval.utils;
+
+import org.apache.asterix.formats.nontagged.BinaryComparatorFactoryProvider;
+import org.apache.asterix.om.pointables.nonvisitor.AIntervalPointable;
+import org.apache.asterix.om.types.BuiltinType;
+import org.apache.asterix.runtime.evaluators.functions.temporal.IntervalLogic;
+import org.apache.asterix.runtime.operators.joins.interval.utils.memory.IntervalJoinUtil;
+import org.apache.hyracks.api.comm.IFrameTupleAccessor;
+import org.apache.hyracks.api.dataflow.value.IBinaryComparator;
+import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.data.std.api.IPointable;
+import org.apache.hyracks.data.std.primitive.TaggedValuePointable;
+import org.apache.hyracks.data.std.primitive.VoidPointable;
+
+public abstract class AbstractIntervalJoinUtil implements IIntervalJoinUtil {
+
+    protected final int idLeft;
+    protected final int idRight;
+
+    protected final IntervalLogic il = new IntervalLogic();
+
+    protected final TaggedValuePointable tvp = TaggedValuePointable.FACTORY.createPointable();
+    protected final AIntervalPointable ipLeft = (AIntervalPointable) AIntervalPointable.FACTORY.createPointable();
+    protected final AIntervalPointable ipRight = (AIntervalPointable) AIntervalPointable.FACTORY.createPointable();
+
+    protected final IBinaryComparator ch = BinaryComparatorFactoryProvider.INSTANCE
+            .getBinaryComparatorFactory(BuiltinType.ANY, BuiltinType.ANY, true).createBinaryComparator();
+    protected final IPointable startLeft = VoidPointable.FACTORY.createPointable();
+    protected final IPointable startRight = VoidPointable.FACTORY.createPointable();
+
+    public AbstractIntervalJoinUtil(int idLeft, int idRight) {
+        this.idLeft = idLeft;
+        this.idRight = idRight;
+    }
+
+    /**
+     * Right (second argument) interval starts before left (first argument) interval ends.
+     */
+    @Override
+    public boolean checkToSaveInMemory(IFrameTupleAccessor accessorLeft, int leftTupleIndex,
+            IFrameTupleAccessor accessorRight, int rightTupleIndex) {
+        long start1 = IntervalJoinUtil.getIntervalStart(accessorRight, rightTupleIndex, idRight);
+        long start0 = IntervalJoinUtil.getIntervalStart(accessorLeft, leftTupleIndex, idLeft);
+        return start0 <= start1;
+    }
+
+    /**
+     * Left (first argument) interval starts after the Right (second argument) interval ends.
+     */
+    @Override
+    public boolean checkToRemoveInMemory(IFrameTupleAccessor accessorLeft, int leftTupleIndex,
+            IFrameTupleAccessor accessorRight, int rightTupleIndex) {
+        long start0 = IntervalJoinUtil.getIntervalStart(accessorLeft, leftTupleIndex, idLeft);
+        long start1 = IntervalJoinUtil.getIntervalStart(accessorRight, rightTupleIndex, idRight);
+        return start0 > start1;
+    }
+
+    /**
+     * Left (first argument) interval starts after the Right (second argument) interval ends.
+     */
+    @Override
+    public boolean checkIfMoreMatches(IFrameTupleAccessor accessorLeft, int leftTupleIndex,
+            IFrameTupleAccessor accessorRight, int rightTupleIndex) {
+        long start1 = IntervalJoinUtil.getIntervalStart(accessorRight, rightTupleIndex, idRight);
+        long end0 = IntervalJoinUtil.getIntervalEnd(accessorLeft, leftTupleIndex, idLeft);
+        return end0 > start1;
+    }
+
+    @Override
+    public boolean checkToSaveInResult(IFrameTupleAccessor accessorLeft, int leftTupleIndex,
+            IFrameTupleAccessor accessorRight, int rightTupleIndex, boolean reversed) throws HyracksDataException {
+        if (reversed) {
+            IntervalJoinUtil.getIntervalPointable(accessorLeft, leftTupleIndex, idLeft, ipRight);
+            IntervalJoinUtil.getIntervalPointable(accessorRight, rightTupleIndex, idRight, ipLeft);
+        } else {
+            IntervalJoinUtil.getIntervalPointable(accessorLeft, leftTupleIndex, idLeft, ipLeft);
+            IntervalJoinUtil.getIntervalPointable(accessorRight, rightTupleIndex, idRight, ipRight);
+        }
+        return compareInterval(ipLeft, ipRight);
+    }
+
+    /**
+     * Right (second argument) interval starts before left (first argument) interval ends.
+     */
+    @Override
+    public boolean checkForEarlyExit(IFrameTupleAccessor accessorLeft, int leftTupleIndex,
+            IFrameTupleAccessor accessorRight, int rightTupleIndex) {
+        long start1 = IntervalJoinUtil.getIntervalStart(accessorRight, rightTupleIndex, idRight);
+        long end0 = IntervalJoinUtil.getIntervalEnd(accessorLeft, leftTupleIndex, idLeft);
+        return end0 < start1;
+    }
+
+    @Override
+    public abstract boolean compareInterval(AIntervalPointable ipLeft, AIntervalPointable ipRight)
+            throws HyracksDataException;
+
+}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/interval/utils/AfterIntervalJoinUtil.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/interval/utils/AfterIntervalJoinUtil.java
new file mode 100644
index 0000000..e192943
--- /dev/null
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/interval/utils/AfterIntervalJoinUtil.java
@@ -0,0 +1,62 @@
+/*
+ * 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.
+ */
+package org.apache.asterix.runtime.operators.joins.interval.utils;
+
+import org.apache.asterix.om.pointables.nonvisitor.AIntervalPointable;
+import org.apache.asterix.runtime.operators.joins.interval.utils.memory.IntervalJoinUtil;
+import org.apache.hyracks.api.comm.IFrameTupleAccessor;
+import org.apache.hyracks.api.exceptions.HyracksDataException;
+
+public class AfterIntervalJoinUtil extends AbstractIntervalJoinUtil {
+
+    public AfterIntervalJoinUtil(int[] keysLeft, int[] keysRight) {
+        super(keysLeft[0], keysRight[0]);
+    }
+
+    @Override
+    public boolean checkToSaveInMemory(IFrameTupleAccessor accessorLeft, int leftTupleID,
+            IFrameTupleAccessor accessorRight, int rightTupleID) {
+        long start0 = IntervalJoinUtil.getIntervalStart(accessorLeft, leftTupleID, idRight);
+        long start1 = IntervalJoinUtil.getIntervalStart(accessorRight, rightTupleID, idRight);
+        return start0 >= start1;
+    }
+
+    @Override
+    public boolean checkToRemoveInMemory(IFrameTupleAccessor accessorLeft, int leftTupleIndex,
+            IFrameTupleAccessor accessorRight, int rightTupleIndex) {
+        return false;
+    }
+
+    @Override
+    public boolean checkForEarlyExit(IFrameTupleAccessor accessorLeft, int leftTupleIndex,
+            IFrameTupleAccessor accessorRight, int rightTupleIndex) {
+        return false;
+    }
+
+    @Override
+    public boolean checkIfMoreMatches(IFrameTupleAccessor accessorLeft, int leftTupleIndex,
+            IFrameTupleAccessor accessorRight, int rightTupleIndex) {
+        return true;
+    }
+
+    @Override
+    public boolean compareInterval(AIntervalPointable ipLeft, AIntervalPointable ipRight) throws HyracksDataException {
+        return il.after(ipLeft, ipRight);
+    }
+}
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.2.update.sqlpp b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/interval/utils/AfterIntervalJoinUtilFactory.java
similarity index 62%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.2.update.sqlpp
copy to asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/interval/utils/AfterIntervalJoinUtilFactory.java
index 4334476..b54edf8 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.2.update.sqlpp
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/interval/utils/AfterIntervalJoinUtilFactory.java
@@ -16,16 +16,16 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-/*
- * Description      :   Check temporal join functionality for interval
- * Expected Result  :   Success
- * Date             :   26th Jun, 2015
- */
+package org.apache.asterix.runtime.operators.joins.interval.utils;
 
-use TinyCollege;
+import org.apache.hyracks.api.context.IHyracksTaskContext;
 
-load dataset Staff using localfs
-(("path"="asterix_nc1://data/tinycollege/staff.adm"),("format"="adm"));
+public class AfterIntervalJoinUtilFactory implements IIntervalJoinUtilFactory {
+    private static final long serialVersionUID = 1L;
 
-load dataset Students using localfs
-(("path"="asterix_nc1://data/tinycollege/students.adm"),("format"="adm"));
+    @Override
+    public IIntervalJoinUtil createIntervalMergeJoinChecker(int[] keys0, int[] keys1, IHyracksTaskContext ctx,
+            int nPartitions) {
+        return new AfterIntervalJoinUtil(keys0, keys1);
+    }
+}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/interval/utils/BeforeIntervalJoinUtil.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/interval/utils/BeforeIntervalJoinUtil.java
new file mode 100644
index 0000000..304775c
--- /dev/null
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/interval/utils/BeforeIntervalJoinUtil.java
@@ -0,0 +1,62 @@
+/*
+ * 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.
+ */
+package org.apache.asterix.runtime.operators.joins.interval.utils;
+
+import org.apache.asterix.om.pointables.nonvisitor.AIntervalPointable;
+import org.apache.asterix.runtime.operators.joins.interval.utils.memory.IntervalJoinUtil;
+import org.apache.hyracks.api.comm.IFrameTupleAccessor;
+import org.apache.hyracks.api.exceptions.HyracksDataException;
+
+public class BeforeIntervalJoinUtil extends AbstractIntervalJoinUtil {
+
+    public BeforeIntervalJoinUtil(int[] keysLeft, int[] keysRight) {
+        super(keysLeft[0], keysRight[0]);
+    }
+
+    @Override
+    public boolean checkToSaveInMemory(IFrameTupleAccessor accessorLeft, int leftTupleID,
+            IFrameTupleAccessor accessorRight, int rightTupleID) {
+        long start0 = IntervalJoinUtil.getIntervalStart(accessorLeft, leftTupleID, idRight);
+        long start1 = IntervalJoinUtil.getIntervalStart(accessorRight, rightTupleID, idRight);
+        return start0 <= start1;
+    }
+
+    @Override
+    public boolean checkToRemoveInMemory(IFrameTupleAccessor accessorLeft, int leftTupleIndex,
+            IFrameTupleAccessor accessorRight, int rightTupleIndex) {
+        return false;
+    }
+
+    @Override
+    public boolean checkForEarlyExit(IFrameTupleAccessor accessorLeft, int leftTupleIndex,
+            IFrameTupleAccessor accessorRight, int rightTupleIndex) {
+        return false;
+    }
+
+    @Override
+    public boolean checkIfMoreMatches(IFrameTupleAccessor accessorLeft, int leftTupleIndex,
+            IFrameTupleAccessor accessorRight, int rightTupleIndex) {
+        return true;
+    }
+
+    @Override
+    public boolean compareInterval(AIntervalPointable ipLeft, AIntervalPointable ipRight) throws HyracksDataException {
+        return il.before(ipLeft, ipRight);
+    }
+}
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.2.update.sqlpp b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/interval/utils/BeforeIntervalJoinUtilFactory.java
similarity index 62%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.2.update.sqlpp
copy to asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/interval/utils/BeforeIntervalJoinUtilFactory.java
index 4334476..a653ff9 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.2.update.sqlpp
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/interval/utils/BeforeIntervalJoinUtilFactory.java
@@ -16,16 +16,16 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-/*
- * Description      :   Check temporal join functionality for interval
- * Expected Result  :   Success
- * Date             :   26th Jun, 2015
- */
+package org.apache.asterix.runtime.operators.joins.interval.utils;
 
-use TinyCollege;
+import org.apache.hyracks.api.context.IHyracksTaskContext;
 
-load dataset Staff using localfs
-(("path"="asterix_nc1://data/tinycollege/staff.adm"),("format"="adm"));
+public class BeforeIntervalJoinUtilFactory implements IIntervalJoinUtilFactory {
+    private static final long serialVersionUID = 1L;
 
-load dataset Students using localfs
-(("path"="asterix_nc1://data/tinycollege/students.adm"),("format"="adm"));
+    @Override
+    public IIntervalJoinUtil createIntervalMergeJoinChecker(int[] keys0, int[] keys1, IHyracksTaskContext ctx,
+            int nPartitions) {
+        return new BeforeIntervalJoinUtil(keys0, keys1);
+    }
+}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/interval/utils/CoveredByIntervalJoinUtil.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/interval/utils/CoveredByIntervalJoinUtil.java
new file mode 100644
index 0000000..a8e8177
--- /dev/null
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/interval/utils/CoveredByIntervalJoinUtil.java
@@ -0,0 +1,59 @@
+/*
+ * 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.
+ */
+package org.apache.asterix.runtime.operators.joins.interval.utils;
+
+import org.apache.asterix.om.pointables.nonvisitor.AIntervalPointable;
+import org.apache.asterix.runtime.operators.joins.interval.utils.memory.IntervalJoinUtil;
+import org.apache.hyracks.api.comm.IFrameTupleAccessor;
+import org.apache.hyracks.api.exceptions.HyracksDataException;
+
+public class CoveredByIntervalJoinUtil extends AbstractIntervalInverseJoinUtil {
+
+    public CoveredByIntervalJoinUtil(int[] keysLeft, int[] keysRight) {
+        super(keysLeft[0], keysRight[0]);
+    }
+
+    /**
+     * Right (second argument) interval starts before left (first argument) interval ends.
+     */
+    @Override
+    public boolean checkToSaveInMemory(IFrameTupleAccessor accessorLeft, int leftTupleIndex,
+            IFrameTupleAccessor accessorRight, int rightTupleIndex) {
+        long start0 = IntervalJoinUtil.getIntervalStart(accessorLeft, leftTupleIndex, idLeft);
+        long end1 = IntervalJoinUtil.getIntervalEnd(accessorRight, rightTupleIndex, idRight);
+        return start0 <= end1;
+    }
+
+    /**
+     * Left (first argument) interval starts after the Right (second argument) interval ends.
+     */
+    @Override
+    public boolean checkToRemoveInMemory(IFrameTupleAccessor accessorLeft, int leftTupleIndex,
+            IFrameTupleAccessor accessorRight, int rightTupleIndex) {
+        long start0 = IntervalJoinUtil.getIntervalStart(accessorLeft, leftTupleIndex, idLeft);
+        long end1 = IntervalJoinUtil.getIntervalEnd(accessorRight, rightTupleIndex, idRight);
+        return start0 > end1;
+
+    }
+
+    @Override
+    public boolean compareInterval(AIntervalPointable ipLeft, AIntervalPointable ipRight) throws HyracksDataException {
+        return il.coveredBy(ipLeft, ipRight);
+    }
+}
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.2.update.sqlpp b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/interval/utils/CoveredByIntervalJoinUtilFactory.java
similarity index 62%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.2.update.sqlpp
copy to asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/interval/utils/CoveredByIntervalJoinUtilFactory.java
index 4334476..7f52c11 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.2.update.sqlpp
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/interval/utils/CoveredByIntervalJoinUtilFactory.java
@@ -16,16 +16,16 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-/*
- * Description      :   Check temporal join functionality for interval
- * Expected Result  :   Success
- * Date             :   26th Jun, 2015
- */
+package org.apache.asterix.runtime.operators.joins.interval.utils;
 
-use TinyCollege;
+import org.apache.hyracks.api.context.IHyracksTaskContext;
 
-load dataset Staff using localfs
-(("path"="asterix_nc1://data/tinycollege/staff.adm"),("format"="adm"));
+public class CoveredByIntervalJoinUtilFactory implements IIntervalJoinUtilFactory {
+    private static final long serialVersionUID = 1L;
 
-load dataset Students using localfs
-(("path"="asterix_nc1://data/tinycollege/students.adm"),("format"="adm"));
+    @Override
+    public IIntervalJoinUtil createIntervalMergeJoinChecker(int[] keys0, int[] keys1, IHyracksTaskContext ctx,
+            int nPartitions) {
+        return new CoveredByIntervalJoinUtil(keys0, keys1);
+    }
+}
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.1.ddl.sqlpp b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/interval/utils/CoversIntervalJoinUtil.java
similarity index 58%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.1.ddl.sqlpp
copy to asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/interval/utils/CoversIntervalJoinUtil.java
index fdef960..cdfaafd 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.1.ddl.sqlpp
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/interval/utils/CoversIntervalJoinUtil.java
@@ -16,29 +16,19 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-/*
- * Description      :   Check temporal join functionality for interval
- * Expected Result  :   Success
- * Date             :   26th Jun, 2015
- */
+package org.apache.asterix.runtime.operators.joins.interval.utils;
 
-drop dataverse TinyCollege if exists;
-create dataverse TinyCollege;
-use TinyCollege;
+import org.apache.asterix.om.pointables.nonvisitor.AIntervalPointable;
+import org.apache.hyracks.api.exceptions.HyracksDataException;
 
-create type StaffType as open {
-        name: string,
-        office: string,
-        employment: interval
-};
-create dataset Staff(StaffType)
-primary key name;
+public class CoversIntervalJoinUtil extends AbstractIntervalJoinUtil {
 
+    public CoversIntervalJoinUtil(int[] keysLeft, int[] keysRight) {
+        super(keysLeft[0], keysRight[0]);
+    }
 
-create type StudentType as open {
-        name: string,
-        office: string,
-        attendance: interval
-};
-create dataset Students(StudentType)
-primary key name;
+    @Override
+    public boolean compareInterval(AIntervalPointable ipLeft, AIntervalPointable ipRight) throws HyracksDataException {
+        return il.covers(ipLeft, ipRight);
+    }
+}
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.2.update.sqlpp b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/interval/utils/CoversIntervalJoinUtilFactory.java
similarity index 62%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.2.update.sqlpp
copy to asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/interval/utils/CoversIntervalJoinUtilFactory.java
index 4334476..9b7481e 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.2.update.sqlpp
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/interval/utils/CoversIntervalJoinUtilFactory.java
@@ -16,16 +16,16 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-/*
- * Description      :   Check temporal join functionality for interval
- * Expected Result  :   Success
- * Date             :   26th Jun, 2015
- */
+package org.apache.asterix.runtime.operators.joins.interval.utils;
 
-use TinyCollege;
+import org.apache.hyracks.api.context.IHyracksTaskContext;
 
-load dataset Staff using localfs
-(("path"="asterix_nc1://data/tinycollege/staff.adm"),("format"="adm"));
+public class CoversIntervalJoinUtilFactory implements IIntervalJoinUtilFactory {
+    private static final long serialVersionUID = 1L;
 
-load dataset Students using localfs
-(("path"="asterix_nc1://data/tinycollege/students.adm"),("format"="adm"));
+    @Override
+    public IIntervalJoinUtil createIntervalMergeJoinChecker(int[] keys0, int[] keys1, IHyracksTaskContext ctx,
+            int nPartitions) {
+        return new CoversIntervalJoinUtil(keys0, keys1);
+    }
+}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/interval/utils/IIntervalJoinUtil.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/interval/utils/IIntervalJoinUtil.java
new file mode 100644
index 0000000..91c14b0
--- /dev/null
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/interval/utils/IIntervalJoinUtil.java
@@ -0,0 +1,102 @@
+/*
+ * 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.
+ */
+package org.apache.asterix.runtime.operators.joins.interval.utils;
+
+import org.apache.asterix.om.pointables.nonvisitor.AIntervalPointable;
+import org.apache.hyracks.api.comm.IFrameTupleAccessor;
+import org.apache.hyracks.api.exceptions.HyracksDataException;
+
+public interface IIntervalJoinUtil {
+
+    /**
+     * Check to see if the right tuple should be added to memory during the merge join.
+     * The memory is used to check the right tuple with the remaining left tuples.
+     * The check is true if the next left tuple could still match with this right tuple.
+     *
+     * @param accessorLeft
+     * @param accessorRight
+     * @return boolean
+     * @throws HyracksDataException
+     */
+    boolean checkToSaveInMemory(IFrameTupleAccessor accessorLeft, int leftTupleIndex, IFrameTupleAccessor accessorRight,
+            int rightTupleIndex) throws HyracksDataException;
+
+    /**
+     * Check to see if the right tuple should be removed from memory during the merge join.
+     * The memory is used to check the right tuple with the remaining left tuples.
+     * The check is true if the next left tuple is NOT able match with this right tuple.
+     *
+     * @param accessorLeft
+     * @param accessorRight
+     * @return boolean
+     * @throws HyracksDataException
+     */
+    boolean checkToRemoveInMemory(IFrameTupleAccessor accessorLeft, int leftTupleIndex,
+            IFrameTupleAccessor accessorRight, int rightTupleIndex) throws HyracksDataException;
+
+    /**
+     * Check to see if the left tuple should continue checking for matches.
+     * The check is true if the next left tuple is NOT able match with this right tuple.
+     *
+     * @param accessorLeft
+     * @param accessorRight
+     * @return boolean
+     * @throws HyracksDataException
+     */
+    boolean checkIfMoreMatches(IFrameTupleAccessor accessorLeft, int leftTupleIndex, IFrameTupleAccessor accessorRight,
+            int rightTupleIndex) throws HyracksDataException;
+
+    /**
+     * Check to see if tuples match join condition
+     * The check is true if they match.
+     *
+     * @param accessorLeft
+     * @param leftTupleIndex
+     * @param accessorRight
+     * @param rightTupleIndex
+     * @return boolean
+     * @throws HyracksDataException
+     */
+    boolean checkToSaveInResult(IFrameTupleAccessor accessorLeft, int leftTupleIndex, IFrameTupleAccessor accessorRight,
+            int rightTupleIndex, boolean reversed) throws HyracksDataException;
+
+    /**
+     * Check to see if the interval matches the join condition.
+     * The check is true if it matches.
+     *
+     * @param ipLeft
+     * @param ipRight
+     * @return boolean
+     * @throws HyracksDataException
+     */
+    boolean compareInterval(AIntervalPointable ipLeft, AIntervalPointable ipRight) throws HyracksDataException;
+
+    /**
+     * Check to see if the left tuple should stop checking for matches.
+     * The check is true if there can be no more matches
+     *
+     * @param accessorLeft
+     * @param accessorRight
+     * @return boolean
+     * @throws HyracksDataException
+     */
+    boolean checkForEarlyExit(IFrameTupleAccessor accessorLeft, int leftTupleIndex, IFrameTupleAccessor accessorRight,
+            int rightTupleIndex) throws HyracksDataException;
+
+}
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.2.update.sqlpp b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/interval/utils/IIntervalJoinUtilFactory.java
similarity index 64%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.2.update.sqlpp
copy to asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/interval/utils/IIntervalJoinUtilFactory.java
index 4334476..b5f0bba 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.2.update.sqlpp
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/interval/utils/IIntervalJoinUtilFactory.java
@@ -16,16 +16,15 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-/*
- * Description      :   Check temporal join functionality for interval
- * Expected Result  :   Success
- * Date             :   26th Jun, 2015
- */
+package org.apache.asterix.runtime.operators.joins.interval.utils;
+
+import java.io.Serializable;
 
-use TinyCollege;
+import org.apache.hyracks.api.context.IHyracksTaskContext;
+import org.apache.hyracks.api.exceptions.HyracksDataException;
 
-load dataset Staff using localfs
-(("path"="asterix_nc1://data/tinycollege/staff.adm"),("format"="adm"));
+public interface IIntervalJoinUtilFactory extends Serializable {
 
-load dataset Students using localfs
-(("path"="asterix_nc1://data/tinycollege/students.adm"),("format"="adm"));
+    IIntervalJoinUtil createIntervalMergeJoinChecker(int[] keys0, int[] keys1, IHyracksTaskContext ctx, int nPartitions)
+            throws HyracksDataException;
+}
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.1.ddl.sqlpp b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/interval/utils/OverlappedByIntervalJoinUtil.java
similarity index 57%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.1.ddl.sqlpp
copy to asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/interval/utils/OverlappedByIntervalJoinUtil.java
index fdef960..e2e79f9 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.1.ddl.sqlpp
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/interval/utils/OverlappedByIntervalJoinUtil.java
@@ -16,29 +16,19 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-/*
- * Description      :   Check temporal join functionality for interval
- * Expected Result  :   Success
- * Date             :   26th Jun, 2015
- */
+package org.apache.asterix.runtime.operators.joins.interval.utils;
 
-drop dataverse TinyCollege if exists;
-create dataverse TinyCollege;
-use TinyCollege;
+import org.apache.asterix.om.pointables.nonvisitor.AIntervalPointable;
+import org.apache.hyracks.api.exceptions.HyracksDataException;
 
-create type StaffType as open {
-        name: string,
-        office: string,
-        employment: interval
-};
-create dataset Staff(StaffType)
-primary key name;
+public class OverlappedByIntervalJoinUtil extends AbstractIntervalInverseJoinUtil {
 
+    public OverlappedByIntervalJoinUtil(int[] keysLeft, int[] keysRight) {
+        super(keysLeft[0], keysRight[0]);
+    }
 
-create type StudentType as open {
-        name: string,
-        office: string,
-        attendance: interval
-};
-create dataset Students(StudentType)
-primary key name;
+    @Override
+    public boolean compareInterval(AIntervalPointable ipLeft, AIntervalPointable ipRight) throws HyracksDataException {
+        return il.overlappedBy(ipLeft, ipRight);
+    }
+}
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.2.update.sqlpp b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/interval/utils/OverlappedByIntervalJoinUtilFactory.java
similarity index 62%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.2.update.sqlpp
copy to asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/interval/utils/OverlappedByIntervalJoinUtilFactory.java
index 4334476..74de359 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.2.update.sqlpp
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/interval/utils/OverlappedByIntervalJoinUtilFactory.java
@@ -16,16 +16,16 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-/*
- * Description      :   Check temporal join functionality for interval
- * Expected Result  :   Success
- * Date             :   26th Jun, 2015
- */
+package org.apache.asterix.runtime.operators.joins.interval.utils;
 
-use TinyCollege;
+import org.apache.hyracks.api.context.IHyracksTaskContext;
 
-load dataset Staff using localfs
-(("path"="asterix_nc1://data/tinycollege/staff.adm"),("format"="adm"));
+public class OverlappedByIntervalJoinUtilFactory implements IIntervalJoinUtilFactory {
+    private static final long serialVersionUID = 1L;
 
-load dataset Students using localfs
-(("path"="asterix_nc1://data/tinycollege/students.adm"),("format"="adm"));
+    @Override
+    public IIntervalJoinUtil createIntervalMergeJoinChecker(int[] keys0, int[] keys1, IHyracksTaskContext ctx,
+            int nPartitions) {
+        return new OverlappedByIntervalJoinUtil(keys0, keys1);
+    }
+}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/interval/utils/OverlappingIntervalJoinUtil.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/interval/utils/OverlappingIntervalJoinUtil.java
new file mode 100644
index 0000000..10a182c
--- /dev/null
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/interval/utils/OverlappingIntervalJoinUtil.java
@@ -0,0 +1,88 @@
+/*
+ * 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.
+ */
+package org.apache.asterix.runtime.operators.joins.interval.utils;
+
+import org.apache.asterix.om.pointables.nonvisitor.AIntervalPointable;
+import org.apache.asterix.runtime.operators.joins.interval.utils.memory.IntervalJoinUtil;
+import org.apache.hyracks.api.comm.IFrameTupleAccessor;
+import org.apache.hyracks.api.exceptions.HyracksDataException;
+
+public class OverlappingIntervalJoinUtil extends AbstractIntervalJoinUtil {
+    private final long partitionStart;
+
+    public OverlappingIntervalJoinUtil(int[] keysLeft, int[] keysRight, long partitionStart) {
+        super(keysLeft[0], keysRight[0]);
+        this.partitionStart = partitionStart;
+    }
+
+    /**
+     * Right (second argument) interval starts before left (first argument) interval ends.
+     */
+    @Override
+    public boolean checkToSaveInMemory(IFrameTupleAccessor accessorLeft, int leftTupleIndex,
+            IFrameTupleAccessor accessorRight, int rightTupleIndex) {
+        long start0 = IntervalJoinUtil.getIntervalStart(accessorLeft, leftTupleIndex, idLeft);
+        long end1 = IntervalJoinUtil.getIntervalEnd(accessorRight, rightTupleIndex, idRight);
+        return start0 < end1;
+    }
+
+    /**
+     * Right (second argument) interval starts before left (first argument) interval ends.
+     */
+    @Override
+    public boolean checkForEarlyExit(IFrameTupleAccessor accessorLeft, int leftTupleIndex,
+            IFrameTupleAccessor accessorRight, int rightTupleIndex) {
+        long start1 = IntervalJoinUtil.getIntervalStart(accessorRight, rightTupleIndex, idRight);
+        long end0 = IntervalJoinUtil.getIntervalEnd(accessorLeft, leftTupleIndex, idLeft);
+        return end0 <= start1;
+    }
+
+    /**
+     * Left (first argument) interval starts after the Right (second argument) interval ends.
+     */
+    @Override
+    public boolean checkToRemoveInMemory(IFrameTupleAccessor accessorLeft, int leftTupleIndex,
+            IFrameTupleAccessor accessorRight, int rightTupleIndex) {
+        long start0 = IntervalJoinUtil.getIntervalStart(accessorLeft, leftTupleIndex, idLeft);
+        long end1 = IntervalJoinUtil.getIntervalEnd(accessorRight, rightTupleIndex, idRight);
+        return start0 >= end1;
+    }
+
+    @Override
+    public boolean checkToSaveInResult(IFrameTupleAccessor accessorLeft, int leftTupleIndex,
+            IFrameTupleAccessor accessorRight, int rightTupleIndex, boolean reversed) throws HyracksDataException {
+        if (reversed) {
+            IntervalJoinUtil.getIntervalPointable(accessorLeft, leftTupleIndex, idLeft, ipRight);
+            IntervalJoinUtil.getIntervalPointable(accessorRight, rightTupleIndex, idRight, ipLeft);
+        } else {
+            IntervalJoinUtil.getIntervalPointable(accessorLeft, leftTupleIndex, idLeft, ipLeft);
+            IntervalJoinUtil.getIntervalPointable(accessorRight, rightTupleIndex, idRight, ipRight);
+        }
+        if (ipLeft.getStartValue() < partitionStart && ipRight.getStartValue() < partitionStart) {
+            // These tuples match in a different partition
+            return false;
+        }
+        return compareInterval(ipLeft, ipRight);
+    }
+
+    @Override
+    public boolean compareInterval(AIntervalPointable ipLeft, AIntervalPointable ipRight) throws HyracksDataException {
+        return il.overlapping(ipLeft, ipRight);
+    }
+}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/interval/utils/OverlappingIntervalJoinUtilFactory.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/interval/utils/OverlappingIntervalJoinUtilFactory.java
new file mode 100644
index 0000000..a1f3203
--- /dev/null
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/interval/utils/OverlappingIntervalJoinUtilFactory.java
@@ -0,0 +1,71 @@
+/*
+ * 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.
+ */
+package org.apache.asterix.runtime.operators.joins.interval.utils;
+
+import org.apache.asterix.dataflow.data.nontagged.serde.ADateSerializerDeserializer;
+import org.apache.asterix.dataflow.data.nontagged.serde.ADateTimeSerializerDeserializer;
+import org.apache.asterix.dataflow.data.nontagged.serde.ATimeSerializerDeserializer;
+import org.apache.asterix.om.types.ATypeTag;
+import org.apache.hyracks.api.context.IHyracksTaskContext;
+import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.dataflow.common.data.partition.range.RangeMap;
+
+public class OverlappingIntervalJoinUtilFactory implements IIntervalJoinUtilFactory {
+    private static final long serialVersionUID = 1L;
+    private final RangeMap rangeMap;
+
+    public OverlappingIntervalJoinUtilFactory(RangeMap rangeMap) {
+        this.rangeMap = rangeMap;
+    }
+
+    @Override
+    public IIntervalJoinUtil createIntervalMergeJoinChecker(int[] keys0, int[] keys1, IHyracksTaskContext ctx,
+            int nPartitions) throws HyracksDataException {
+        int fieldIndex = 0;
+        int partition = ctx.getTaskAttemptId().getTaskId().getPartition();
+        //Calculate Partitions slot
+        int nRanges = rangeMap.getSplitCount() + 1;
+        double rangesPerPart = 1.0;
+        if (nRanges > nPartitions) {
+            rangesPerPart = ((double) nRanges) / nPartitions;
+        }
+        int slot = ((int) Math.ceil(partition * rangesPerPart) % nRanges) - 1;
+        //Find Partitions Start Value based on slot
+        long partitionStart = Long.MIN_VALUE;
+        if (slot >= 0) {
+            switch (ATypeTag.VALUE_TYPE_MAPPING[rangeMap.getTag(fieldIndex, slot)]) {
+                case DATETIME:
+                    partitionStart = ADateTimeSerializerDeserializer.getChronon(rangeMap.getByteArray(),
+                            rangeMap.getStartOffset(fieldIndex, slot) + 1);
+                    break;
+                case DATE:
+                    partitionStart = ADateSerializerDeserializer.getChronon(rangeMap.getByteArray(),
+                            rangeMap.getStartOffset(fieldIndex, slot) + 1);
+                    break;
+                case TIME:
+                    partitionStart = ATimeSerializerDeserializer.getChronon(rangeMap.getByteArray(),
+                            rangeMap.getStartOffset(fieldIndex, slot) + 1);
+                    break;
+                default:
+                    throw new HyracksDataException("RangeMap type is not supported");
+            }
+        }
+        return new OverlappingIntervalJoinUtil(keys0, keys1, partitionStart);
+    }
+}
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.1.ddl.sqlpp b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/interval/utils/OverlapsIntervalJoinUtil.java
similarity index 58%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.1.ddl.sqlpp
copy to asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/interval/utils/OverlapsIntervalJoinUtil.java
index fdef960..392c0cf 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_after/interval_after.1.ddl.sqlpp
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/interval/utils/OverlapsIntervalJoinUtil.java
@@ -16,29 +16,19 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-/*
- * Description      :   Check temporal join functionality for interval
- * Expected Result  :   Success
- * Date             :   26th Jun, 2015
- */
+package org.apache.asterix.runtime.operators.joins.interval.utils;
 
-drop dataverse TinyCollege if exists;
-create dataverse TinyCollege;
-use TinyCollege;
+import org.apache.asterix.om.pointables.nonvisitor.AIntervalPointable;
+import org.apache.hyracks.api.exceptions.HyracksDataException;
 
-create type StaffType as open {
-        name: string,
-        office: string,
-        employment: interval
-};
-create dataset Staff(StaffType)
-primary key name;
+public class OverlapsIntervalJoinUtil extends AbstractIntervalJoinUtil {
 
+    public OverlapsIntervalJoinUtil(int[] keysLeft, int[] keysRight) {
+        super(keysLeft[0], keysRight[0]);
+    }
 
-create type StudentType as open {
-        name: string,
-        office: string,
-        attendance: interval
-};
-create dataset Students(StudentType)
-primary key name;
+    @Override
+    public boolean compareInterval(AIntervalPointable ipLeft, AIntervalPointable ipRight) throws HyracksDataException {
+        return il.overlaps(ipLeft, ipRight);
+    }
+}
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.2.update.sqlpp b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/interval/utils/OverlapsIntervalJoinUtilFactory.java
similarity index 62%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.2.update.sqlpp
copy to asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/interval/utils/OverlapsIntervalJoinUtilFactory.java
index 4334476..fb8be0b 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_joins/interval_before/interval_before.2.update.sqlpp
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/interval/utils/OverlapsIntervalJoinUtilFactory.java
@@ -16,16 +16,16 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-/*
- * Description      :   Check temporal join functionality for interval
- * Expected Result  :   Success
- * Date             :   26th Jun, 2015
- */
+package org.apache.asterix.runtime.operators.joins.interval.utils;
 
-use TinyCollege;
+import org.apache.hyracks.api.context.IHyracksTaskContext;
 
-load dataset Staff using localfs
-(("path"="asterix_nc1://data/tinycollege/staff.adm"),("format"="adm"));
+public class OverlapsIntervalJoinUtilFactory implements IIntervalJoinUtilFactory {
+    private static final long serialVersionUID = 1L;
 
-load dataset Students using localfs
-(("path"="asterix_nc1://data/tinycollege/students.adm"),("format"="adm"));
+    @Override
+    public IIntervalJoinUtil createIntervalMergeJoinChecker(int[] keys0, int[] keys1, IHyracksTaskContext ctx,
+            int nPartitions) {
+        return new OverlapsIntervalJoinUtil(keys0, keys1);
+    }
+}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/interval/utils/memory/AbstractTupleAccessor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/interval/utils/memory/AbstractTupleAccessor.java
new file mode 100644
index 0000000..397f959
--- /dev/null
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/interval/utils/memory/AbstractTupleAccessor.java
@@ -0,0 +1,194 @@
+/*
+ * 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.
+ */
+
+package org.apache.asterix.runtime.operators.joins.interval.utils.memory;
+
+import java.nio.ByteBuffer;
+
+import org.apache.hyracks.api.comm.IFrameTupleAccessor;
+import org.apache.hyracks.dataflow.std.structures.TuplePointer;
+
+public abstract class AbstractTupleAccessor implements ITupleAccessor {
+    public static final int UNSET = -2;
+    public static final int INITIALIZED = -1;
+
+    protected int tupleId = UNSET;
+
+    protected int frameId;
+
+    protected abstract IFrameTupleAccessor getInnerAccessor();
+
+    protected abstract void resetInnerAccessor(int frameId);
+
+    protected abstract void resetInnerAccessor(TuplePointer tp);
+
+    protected abstract int getFrameCount();
+
+    @Override
+    public int getTupleStartOffset() {
+        return getTupleStartOffset(tupleId);
+    }
+
+    @Override
+    public int getTupleLength() {
+        return getTupleLength(tupleId);
+    }
+
+    @Override
+    public int getAbsFieldStartOffset(int fieldId) {
+        return getAbsoluteFieldStartOffset(tupleId, fieldId);
+    }
+
+    @Override
+    public int getFieldLength(int fieldId) {
+        return getFieldLength(tupleId, fieldId);
+    }
+
+    @Override
+    public ByteBuffer getBuffer() {
+        return getInnerAccessor().getBuffer();
+    }
+
+    @Override
+    public int getFieldCount() {
+        return getInnerAccessor().getFieldCount();
+    }
+
+    @Override
+    public int getFieldSlotsLength() {
+        return getInnerAccessor().getFieldSlotsLength();
+    }
+
+    @Override
+    public int getFieldEndOffset(int tupleIndex, int fIdx) {
+        return getInnerAccessor().getFieldEndOffset(tupleId, fIdx);
+    }
+
+    @Override
+    public int getFieldStartOffset(int tupleIndex, int fIdx) {
+        return getInnerAccessor().getFieldStartOffset(tupleIndex, fIdx);
+    }
+
+    @Override
+    public int getFieldLength(int tupleIndex, int fIdx) {
+        return getInnerAccessor().getFieldLength(tupleIndex, fIdx);
+    }
+
+    @Override
+    public int getTupleLength(int tupleIndex) {
+        return getInnerAccessor().getTupleLength(tupleIndex);
+    }
+
+    @Override
+    public int getTupleEndOffset(int tupleIndex) {
+        return getInnerAccessor().getTupleEndOffset(tupleIndex);
+    }
+
+    @Override
+    public int getTupleStartOffset(int tupleIndex) {
+        return getInnerAccessor().getTupleStartOffset(tupleIndex);
+    }
+
+    @Override
+    public int getAbsoluteFieldStartOffset(int tupleIndex, int fIdx) {
+        return getInnerAccessor().getAbsoluteFieldStartOffset(tupleIndex, fIdx);
+    }
+
+    @Override
+    public int getTupleCount() {
+        return getInnerAccessor().getTupleCount();
+    }
+
+    @Override
+    public void reset(TuplePointer tuplePointer) {
+        resetInnerAccessor(tuplePointer.getFrameIndex());
+    }
+
+    @Override
+    public void reset(ByteBuffer buffer) {
+        throw new IllegalAccessError("Should never call this reset");
+    }
+
+    @Override
+    public int getTupleEndOffset() {
+        return getInnerAccessor().getTupleEndOffset(tupleId);
+    }
+
+    @Override
+    public int getFieldEndOffset(int fieldId) {
+        return getInnerAccessor().getFieldEndOffset(tupleId, fieldId);
+    }
+
+    @Override
+    public int getFieldStartOffset(int fieldId) {
+        return getInnerAccessor().getFieldStartOffset(tupleId, fieldId);
+    }
+
+    @Override
+    public void getTuplePointer(TuplePointer tp) {
+        tp.reset(frameId, tupleId);
+    }
+
+    @Override
+    public int getTupleId() {
+        return tupleId;
+    }
+
+    @Override
+    public void setTupleId(int tupleId) {
+        this.tupleId = tupleId;
+    }
+
+    @Override
+    public void reset() {
+        tupleId = INITIALIZED;
+        frameId = 0;
+        resetInnerAccessor(frameId);
+    }
+
+    @Override
+    public boolean hasNext() {
+        if (tupleId + 1 < getTupleCount() || frameId + 1 < getFrameCount()) {
+            return true;
+        }
+        return false;
+    }
+
+    @Override
+    public boolean exists() {
+        return INITIALIZED < tupleId && getTupleEndOffset(tupleId) > 0 && tupleId < getTupleCount()
+                && frameId < getFrameCount();
+    }
... 2321 lines suppressed ...