You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@asterixdb.apache.org by "Preston Carman (Code Review)" <do...@asterixdb.incubator.apache.org> on 2016/01/29 18:51:58 UTC

Change in asterixdb[master]: ASTERIXDB-1281 - Interval format update to AQL and ADM

Preston Carman has uploaded a new change for review.

  https://asterix-gerrit.ics.uci.edu/602

Change subject: ASTERIXDB-1281 - Interval format update to AQL and ADM
......................................................................

ASTERIXDB-1281 - Interval format update to AQL and ADM

The new interval format takes a more generic approach to representing intervals.
Here is an example for a date interval:

interval(date("2012-01-01”), date(”2013-04-01”))

Note that the interval type is defined by the arguments to the interval expression.
Currently only date, time, and datetime types are supported for intervals. The new
format is used for ADM and AQL.

In addition to the format change, the internal byte structure of an interval has been
updated. The format looks like the following:

byte tag, T start, T end (where T is a date, time or datetime type)

Note how the tag has been moved to the front. Also with the new sturcture, an
interval is variable length, not fixed length as before.

Change-Id: I009c71b7a445d141e228ba15d56d0b6cf3c8a3f5
---
M asterix-app/data/temporal/simpletemp_30.json
M asterix-app/data/temporal/temporalData.json
M asterix-app/src/test/resources/runtimets/queries/constructor/interval/interval.3.query.aql
M asterix-app/src/test/resources/runtimets/queries_sqlpp/constructor/interval/interval.3.query.sqlpp
M asterix-app/src/test/resources/runtimets/results/comparison/interval_order/interval_order.3.adm
M asterix-app/src/test/resources/runtimets/results/comparison/interval_order/interval_order.4.adm
M asterix-app/src/test/resources/runtimets/results/constructor/interval/interval.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/get_overlapping_interval/get_overlapping_interval.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/insert_from_ext_ds/insert_from_ext_ds.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/insert_from_ext_ds_2/insert_from_ext_ds_2.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/interval_bin/interval_bin.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/interval_bin_gby_0/interval_bin_gby_0.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/interval_bin_gby_1/interval_bin_gby_1.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/overlap_bins/overlap_bins.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/overlap_bins_gby_0/overlap_bins_gby_0.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/overlap_bins_gby_1/overlap_bins_gby_1.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/overlap_bins_gby_3/overlap_bins_gby_3.1.adm
M asterix-app/src/test/resources/runtimets/results_parser_sqlpp/constructor/interval/interval.3.ast
M asterix-doc/src/site/markdown/aql/allens.md
M asterix-doc/src/site/markdown/aql/datamodel.md
M asterix-doc/src/site/markdown/aql/functions.md
M asterix-external-data/src/main/java/org/apache/asterix/external/library/java/JObjectAccessors.java
M asterix-external-data/src/main/java/org/apache/asterix/external/parser/ADMDataParser.java
M asterix-external-data/src/main/java/org/apache/asterix/external/parser/AbstractDataParser.java
M asterix-external-data/src/main/resources/adm.grammar
M asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AIntervalAscPartialBinaryComparatorFactory.java
M asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AIntervalDescPartialBinaryComparatorFactory.java
M asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/adm/AIntervalPrinter.java
M asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/clean/AIntervalPrinter.java
M asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/lossless/AIntervalPrinter.java
M asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AIntervalSerializerDeserializer.java
M asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AOrderedListSerializerDeserializer.java
M asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AUnorderedListSerializerDeserializer.java
M asterix-om/src/main/java/org/apache/asterix/om/functions/AsterixBuiltinFunctions.java
M asterix-om/src/main/java/org/apache/asterix/om/pointables/AListVisitablePointable.java
M asterix-om/src/main/java/org/apache/asterix/om/pointables/printer/json/clean/APrintVisitor.java
M asterix-om/src/main/java/org/apache/asterix/om/pointables/printer/json/lossless/APrintVisitor.java
M asterix-om/src/main/java/org/apache/asterix/om/util/NonTaggedFormatUtil.java
M asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalEndAccessor.java
M asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalEndDateAccessor.java
M asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalEndDatetimeAccessor.java
M asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalEndTimeAccessor.java
M asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalStartAccessor.java
M asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalStartDateAccessor.java
M asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalStartDatetimeAccessor.java
M asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalStartTimeAccessor.java
A asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AIntervalConstructorDescriptor.java
M asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/AbstractIntervalLogicFuncDescriptor.java
M asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DurationFromIntervalDescriptor.java
M asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/GetOverlappingIntervalDescriptor.java
M asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/OverlapBinsDescriptor.java
M asterix-runtime/src/main/java/org/apache/asterix/runtime/formats/NonTaggedDataFormat.java
52 files changed, 844 insertions(+), 349 deletions(-)


  git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb refs/changes/02/602/1

diff --git a/asterix-app/data/temporal/simpletemp_30.json b/asterix-app/data/temporal/simpletemp_30.json
index dcc9d8c..fe3406a 100644
--- a/asterix-app/data/temporal/simpletemp_30.json
+++ b/asterix-app/data/temporal/simpletemp_30.json
@@ -1,3 +1,3 @@
-{ "date": date("4619-11-23"), "time": time("14:29:36.786Z"), "datetime": datetime("2749-01-27T17:27:30.020Z"), "duration": duration("-P474133Y7M854630DT4H40M6.45S"), "year-month-duration": year-month-duration("P193989Y3M"), "day-time-duration": day-time-duration("P4477686DT4H49M31.87S"), "date-interval": interval-date("-9537-08-04, 9656-06-03"), "time-interval": interval-time("12:04:45.689Z, 12:41:59.002Z"), "datetime-interval": interval-datetime("-2640-10-11T17:32:15.675Z, 4104-02-01T05:59:11.902Z") }
-{ "date": date("-9971-09-24"), "time": time("11:38:17.154Z"), "datetime": datetime("1259-11-13T09:49:11.852Z"), "duration": duration("P473653Y9M4566143DT10H20M53.61S"), "year-month-duration": year-month-duration("P148233Y10M"), "day-time-duration": day-time-duration("-P7236357DT2H56M56.164S"), "date-interval": interval-date("-0255-09-06, 4925-05-03"), "time-interval": interval-time("12:10:45.169Z, 15:37:48.736Z"), "datetime-interval": interval-datetime("0534-12-08T08:20:31.487Z, 6778-02-16T22:40:21.653Z") }
-{ "date": date("7986-11-25"), "time": time("12:49:39.736Z"), "datetime": datetime("-8337-01-30T15:23:07.598Z"), "duration": duration("-P184484Y7M2241423DT10H42M49.500S"), "year-month-duration": year-month-duration("-P546031Y3M"), "day-time-duration": day-time-duration("P2623386DT10H32M31.983S"), "date-interval": interval-date("-4514-05-24, 3337-08-26"), "time-interval": interval-time("04:16:42.321Z, 12:22:56.816Z"), "datetime-interval": interval-datetime("2129-12-12T13:18:35.758Z, 8647-07-01T13:10:19.691Z") }
+{ "date": date("4619-11-23"), "time": time("14:29:36.786Z"), "datetime": datetime("2749-01-27T17:27:30.020Z"), "duration": duration("-P474133Y7M854630DT4H40M6.45S"), "year-month-duration": year-month-duration("P193989Y3M"), "day-time-duration": day-time-duration("P4477686DT4H49M31.87S"), "date-interval": interval(date("-9537-08-04"), date("9656-06-03")), "time-interval": interval(time("12:04:45.689Z"), time("12:41:59.002Z")), "datetime-interval": interval(datetime("-2640-10-11T17:32:15.675Z"), datetime("4104-02-01T05:59:11.902Z")) }
+{ "date": date("-9971-09-24"), "time": time("11:38:17.154Z"), "datetime": datetime("1259-11-13T09:49:11.852Z"), "duration": duration("P473653Y9M4566143DT10H20M53.61S"), "year-month-duration": year-month-duration("P148233Y10M"), "day-time-duration": day-time-duration("-P7236357DT2H56M56.164S"), "date-interval": interval(date("-0255-09-06"), date("4925-05-03")), "time-interval": interval(time("12:10:45.169Z"), time("15:37:48.736Z")), "datetime-interval": interval(datetime("0534-12-08T08:20:31.487Z"), datetime("6778-02-16T22:40:21.653Z")) }
+{ "date": date("7986-11-25"), "time": time("12:49:39.736Z"), "datetime": datetime("-8337-01-30T15:23:07.598Z"), "duration": duration("-P184484Y7M2241423DT10H42M49.500S"), "year-month-duration": year-month-duration("-P546031Y3M"), "day-time-duration": day-time-duration("P2623386DT10H32M31.983S"), "date-interval": interval(date("-4514-05-24"), date("3337-08-26")), "time-interval": interval(time("04:16:42.321Z"), time("12:22:56.816Z")), "datetime-interval": interval(datetime("2129-12-12T13:18:35.758Z"), datetime("8647-07-01T13:10:19.691Z")) }
\ No newline at end of file
diff --git a/asterix-app/data/temporal/temporalData.json b/asterix-app/data/temporal/temporalData.json
index bedf2c7..96433da 100644
--- a/asterix-app/data/temporal/temporalData.json
+++ b/asterix-app/data/temporal/temporalData.json
@@ -1,4 +1,4 @@
-{"id": "001", "dateField": date("-2012-12-12"), "dateFieldPlus": date("0990-01-01"), "timeField": time("23:49:12.39Z"), "timeFieldPlus": time("03:23:12.2"), "datetimeField": datetime("2012-12-12T00:00:00.001"), "datetimeFieldPlus": datetime("-00130810T221015398"), "durationField": duration("P20Y19DT3H74M23.34S"), "durationFieldPlus": duration("-P2MT4M300.68S"), "intervalField": interval-datetime("2012-12-12T00:00:00.001,20130810T221015398") }
-{"id": "002", "timeField": time("12:12:12.219+08:00"), "timeField2": time("13:13:13.321-08:00"), "datetimeField": datetime("19201220T232918478-1200"), "intervalField": interval-time("12:29:30+08:00, 235959999-0800") }
-{"id": "003", "durationField": duration("-P27Y48DT2400H"), "datetimeField": datetime("-0290-03-23T00:59:48.999+07:00"), "intervalField": interval-date("-2012-03-17, 2013-04-01"), "intervalPlus": interval-time("19:23:32.328Z,23:20:20") }
+{"id": "001", "dateField": date("-2012-12-12"), "dateFieldPlus": date("0990-01-01"), "timeField": time("23:49:12.39Z"), "timeFieldPlus": time("03:23:12.2"), "datetimeField": datetime("2012-12-12T00:00:00.001"), "datetimeFieldPlus": datetime("-00130810T221015398"), "durationField": duration("P20Y19DT3H74M23.34S"), "durationFieldPlus": duration("-P2MT4M300.68S"), "intervalField": interval(datetime("2012-12-12T00:00:00.001"),datetime("20130810T221015398")) }
+{"id": "002", "timeField": time("12:12:12.219+08:00"), "timeField2": time("13:13:13.321-08:00"), "datetimeField": datetime("19201220T232918478-1200"), "intervalField": interval(time("12:29:30+08:00"), time("235959999-0800")) }
+{"id": "003", "durationField": duration("-P27Y48DT2400H"), "datetimeField": datetime("-0290-03-23T00:59:48.999+07:00"), "intervalField": interval-date("-2012-03-17, 2013-04-01"), "intervalPlus": interval(time("19:23:32.328Z"), time("23:20:20")) }
 {"id": "003", "dayTimeDurationField": day-time-duration("-P48DT2400H"), "yearMonthDurationField": year-month-duration("P27Y50M") }
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/queries/constructor/interval/interval.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/interval/interval.3.query.aql
index 2e1b6f6..0e39663 100644
--- a/asterix-app/src/test/resources/runtimets/queries/constructor/interval/interval.3.query.aql
+++ b/asterix-app/src/test/resources/runtimets/queries/constructor/interval/interval.3.query.aql
@@ -55,6 +55,15 @@
 let $itv64 := interval-start-from-datetime("-2043-11-19T15:32:39.293", "P439Y3M20DT20H39M58.949S")
 let $itv65 := interval-start-from-datetime(null, duration("P439Y3M20DT20H39M58.949S"))
 let $itv66 := interval-start-from-datetime(datetime("-2043-11-19T15:32:39.293"), null)
+let $itv71 := interval(date("2010-10-30"), date("2012-10-21"))
+let $itv72 := interval(null, date("2012-10-21"))
+let $itv73 := interval(date("2010-10-30"), null)
+let $itv74 := interval(time("03:04:05.678-11:00"), time("232425267+0200"))
+let $itv75 := interval(null, time("232425267+0200"))
+let $itv76 := interval(time("03:04:05.678-11:00"), null)
+let $itv77 := interval(datetime("-1987-11-19T02:43:57.938+08:00"), datetime("19991112T124935948-0700"))
+let $itv78 := interval(null, datetime("19991112T124935948-0700"))
+let $itv79 := interval(datetime("-1987-11-19T02:43:57.938+08:00"), null)
 
-return {"interval11": $itv11, "interval12": $itv12, "interval13": $itv13, "interval14": $itv14, "interval15": $itv15, "interval16": $itv16, "interval21": $itv21, "interval22": $itv22, "interval23": $itv23, "interval24": $itv24, "interval25": $itv25, "interval26": $itv26, "interval31": $itv31, "interval32": $itv32, "interval33": $itv33, "interval34": $itv34, "interval35": $itv35, "interval36": $itv36, "interval41": $itv41, "interval42": $itv42, "interval43": $itv43, "interval44": $itv44, "interval45": $itv45, "interval46": $itv46, "interval51": $itv51, "interval52": $itv52, "interval53": $itv53, "interval54": $itv54, "interval55": $itv55, "interval56": $itv56, "interval61": $itv61, "interval62": $itv62, "interval63": $itv63, "interval64": $itv64, "interval65": $itv65, "interval66": $itv66}
+return {"interval11": $itv11, "interval12": $itv12, "interval13": $itv13, "interval14": $itv14, "interval15": $itv15, "interval16": $itv16, "interval21": $itv21, "interval22": $itv22, "interval23": $itv23, "interval24": $itv24, "interval25": $itv25, "interval26": $itv26, "interval31": $itv31, "interval32": $itv32, "interval33": $itv33, "interval34": $itv34, "interval35": $itv35, "interval36": $itv36, "interval41": $itv41, "interval42": $itv42, "interval43": $itv43, "interval44": $itv44, "interval45": $itv45, "interval46": $itv46, "interval51": $itv51, "interval52": $itv52, "interval53": $itv53, "interval54": $itv54, "interval55": $itv55, "interval56": $itv56, "interval61": $itv61, "interval62": $itv62, "interval63": $itv63, "interval64": $itv64, "interval65": $itv65, "interval66": $itv66, "interval71": $itv71, "interval72": $itv72, "interval73": $itv73, "interval74": $itv74, "interval75": $itv75, "interval76": $itv76, "interval77": $itv77, "interval78": $itv78, "interval79":
  $itv79}
 
diff --git a/asterix-app/src/test/resources/runtimets/queries_sqlpp/constructor/interval/interval.3.query.sqlpp b/asterix-app/src/test/resources/runtimets/queries_sqlpp/constructor/interval/interval.3.query.sqlpp
index 83ffa9b..773eaf3 100644
--- a/asterix-app/src/test/resources/runtimets/queries_sqlpp/constructor/interval/interval.3.query.sqlpp
+++ b/asterix-app/src/test/resources/runtimets/queries_sqlpp/constructor/interval/interval.3.query.sqlpp
@@ -20,4 +20,4 @@
 use test;
 
 
-{'interval11':test."interval-from-date"(test.date('2010-10-30'),test.date('2012-10-21')),'interval12':test."interval-from-date"('2010-10-30',test.date('2012-10-21')),'interval13':test."interval-from-date"(test.date('2010-10-30'),'2012-10-21'),'interval14':test."interval-from-date"('2010-10-30','2012-10-21'),'interval15':test."interval-from-date"(null,'2012-10-21'),'interval16':test."interval-from-date"('2010-10-30',null),'interval21':test."interval-from-time"(test.time('03:04:05.678-11:00'),test.time('232425267+0200')),'interval22':test."interval-from-time"('03:04:05.678-11:00',test.time('232425267+0200')),'interval23':test."interval-from-time"(test.time('03:04:05.678-11:00'),'232425267+0200'),'interval24':test."interval-from-time"('03:04:05.678-11:00','232425267+0200'),'interval25':test."interval-from-time"(null,test.time('232425267+0200')),'interval26':test."interval-from-time"(test.time('03:04:05.678-11:00'),null),'interval31':test."interval-from-datetime"(test.datetime('
 -1987-11-19T02:43:57.938+08:00'),test.datetime('19991112T124935948-0700')),'interval32':test."interval-from-datetime"('-1987-11-19T02:43:57.938+08:00',test.datetime('19991112T124935948-0700')),'interval33':test."interval-from-datetime"(test.datetime('-1987-11-19T02:43:57.938+08:00'),'19991112T124935948-0700'),'interval34':test."interval-from-datetime"('-1987-11-19T02:43:57.938+08:00','19991112T124935948-0700'),'interval35':test."interval-from-datetime"(null,test.datetime('19991112T124935948-0700')),'interval36':test."interval-from-datetime"(test.datetime('-1987-11-19T02:43:57.938+08:00'),null),'interval41':test."interval-start-from-date"(test.date('0001-12-27'),test.duration('P3Y394DT48H398.483S')),'interval42':test."interval-start-from-date"('0001-12-27',test.duration('P3Y394DT48H398.483S')),'interval43':test."interval-start-from-date"(test.date('0001-12-27'),'P3Y394DT48H398.483S'),'interval44':test."interval-start-from-date"('0001-12-27','P3Y394DT48H398.483S'),'interval45'
 :test."interval-start-from-date"(null,test.duration('P3Y394DT48H398.483S')),'interval46':test."interval-start-from-date"(test.date('0001-12-27'),null),'interval51':test."interval-start-from-time"(test.time('20:03:20.948'),test.duration('P60DT48M389.938S')),'interval52':test."interval-start-from-time"('20:03:20.948',test.duration('P60DT48M389.938S')),'interval53':test."interval-start-from-time"(test.time('20:03:20.948'),'P60DT48M389.938S'),'interval54':test."interval-start-from-time"('20:03:20.948','P60DT48M389.938S'),'interval55':test."interval-start-from-time"(null,test.duration('P60DT48M389.938S')),'interval56':test."interval-start-from-time"(test.time('20:03:20.948'),null),'interval61':test."interval-start-from-datetime"(test.datetime('-2043-11-19T15:32:39.293'),test.duration('P439Y3M20DT20H39M58.949S')),'interval62':test."interval-start-from-datetime"('-2043-11-19T15:32:39.293',test.duration('P439Y3M20DT20H39M58.949S')),'interval63':test."interval-start-from-datetime"(te
 st.datetime('-2043-11-19T15:32:39.293'),'P439Y3M20DT20H39M58.949S'),'interval64':test."interval-start-from-datetime"('-2043-11-19T15:32:39.293','P439Y3M20DT20H39M58.949S'),'interval65':test."interval-start-from-datetime"(null,test.duration('P439Y3M20DT20H39M58.949S')),'interval66':test."interval-start-from-datetime"(test.datetime('-2043-11-19T15:32:39.293'),null)};
+{'interval11':test."interval-from-date"(test.date('2010-10-30'),test.date('2012-10-21')),'interval12':test."interval-from-date"('2010-10-30',test.date('2012-10-21')),'interval13':test."interval-from-date"(test.date('2010-10-30'),'2012-10-21'),'interval14':test."interval-from-date"('2010-10-30','2012-10-21'),'interval15':test."interval-from-date"(null,'2012-10-21'),'interval16':test."interval-from-date"('2010-10-30',null),'interval21':test."interval-from-time"(test.time('03:04:05.678-11:00'),test.time('232425267+0200')),'interval22':test."interval-from-time"('03:04:05.678-11:00',test.time('232425267+0200')),'interval23':test."interval-from-time"(test.time('03:04:05.678-11:00'),'232425267+0200'),'interval24':test."interval-from-time"('03:04:05.678-11:00','232425267+0200'),'interval25':test."interval-from-time"(null,test.time('232425267+0200')),'interval26':test."interval-from-time"(test.time('03:04:05.678-11:00'),null),'interval31':test."interval-from-datetime"(test.datetime('
 -1987-11-19T02:43:57.938+08:00'),test.datetime('19991112T124935948-0700')),'interval32':test."interval-from-datetime"('-1987-11-19T02:43:57.938+08:00',test.datetime('19991112T124935948-0700')),'interval33':test."interval-from-datetime"(test.datetime('-1987-11-19T02:43:57.938+08:00'),'19991112T124935948-0700'),'interval34':test."interval-from-datetime"('-1987-11-19T02:43:57.938+08:00','19991112T124935948-0700'),'interval35':test."interval-from-datetime"(null,test.datetime('19991112T124935948-0700')),'interval36':test."interval-from-datetime"(test.datetime('-1987-11-19T02:43:57.938+08:00'),null),'interval41':test."interval-start-from-date"(test.date('0001-12-27'),test.duration('P3Y394DT48H398.483S')),'interval42':test."interval-start-from-date"('0001-12-27',test.duration('P3Y394DT48H398.483S')),'interval43':test."interval-start-from-date"(test.date('0001-12-27'),'P3Y394DT48H398.483S'),'interval44':test."interval-start-from-date"('0001-12-27','P3Y394DT48H398.483S'),'interval45'
 :test."interval-start-from-date"(null,test.duration('P3Y394DT48H398.483S')),'interval46':test."interval-start-from-date"(test.date('0001-12-27'),null),'interval51':test."interval-start-from-time"(test.time('20:03:20.948'),test.duration('P60DT48M389.938S')),'interval52':test."interval-start-from-time"('20:03:20.948',test.duration('P60DT48M389.938S')),'interval53':test."interval-start-from-time"(test.time('20:03:20.948'),'P60DT48M389.938S'),'interval54':test."interval-start-from-time"('20:03:20.948','P60DT48M389.938S'),'interval55':test."interval-start-from-time"(null,test.duration('P60DT48M389.938S')),'interval56':test."interval-start-from-time"(test.time('20:03:20.948'),null),'interval61':test."interval-start-from-datetime"(test.datetime('-2043-11-19T15:32:39.293'),test.duration('P439Y3M20DT20H39M58.949S')),'interval62':test."interval-start-from-datetime"('-2043-11-19T15:32:39.293',test.duration('P439Y3M20DT20H39M58.949S')),'interval63':test."interval-start-from-datetime"(te
 st.datetime('-2043-11-19T15:32:39.293'),'P439Y3M20DT20H39M58.949S'),'interval64':test."interval-start-from-datetime"('-2043-11-19T15:32:39.293','P439Y3M20DT20H39M58.949S'),'interval65':test."interval-start-from-datetime"(null,test.duration('P439Y3M20DT20H39M58.949S')),'interval66':test."interval-start-from-datetime"(test.datetime('-2043-11-19T15:32:39.293'),null),'interval71':test.interval(test.date('2010-10-30'),test.date('2012-10-21')),'interval72':test.interval(null,test.date('2012-10-21')),'interval73':test.interval(test.date('2010-10-30'),null),'interval74':test.interval(test.time('03:04:05.678-11:00'),test.time('232425267+0200')),'interval75':test.interval(null,test.time('232425267+0200')),'interval76':test.interval(test.time('03:04:05.678-11:00'),null),'interval77':test.interval(test.datetime('-1987-11-19T02:43:57.938+08:00'),test.datetime('19991112T124935948-0700')),'interval78':test.interval(null,test.datetime('19991112T124935948-0700')),'interval79':test.interval(t
 est.datetime('-1987-11-19T02:43:57.938+08:00'),null)};
diff --git a/asterix-app/src/test/resources/runtimets/results/comparison/interval_order/interval_order.3.adm b/asterix-app/src/test/resources/runtimets/results/comparison/interval_order/interval_order.3.adm
index 35b6077..c55c2fc 100644
--- a/asterix-app/src/test/resources/runtimets/results/comparison/interval_order/interval_order.3.adm
+++ b/asterix-app/src/test/resources/runtimets/results/comparison/interval_order/interval_order.3.adm
@@ -1,7 +1,7 @@
-interval-date("2001-01-01, 2010-01-01")
-interval-date("2002-01-01, 2003-01-01")
-interval-date("2002-01-01, 2010-01-01")
-interval-date("2003-01-01, 2008-01-01")
-interval-date("2003-01-01, 2008-01-01")
-interval-date("2004-01-01, 2009-01-01")
-interval-date("2006-01-01, 2010-01-01")
\ No newline at end of file
+interval(date("2001-01-01"), date("2010-01-01"))
+interval(date("2002-01-01"), date("2003-01-01"))
+interval(date("2002-01-01"), date("2010-01-01"))
+interval(date("2003-01-01"), date("2008-01-01"))
+interval(date("2003-01-01"), date("2008-01-01"))
+interval(date("2004-01-01"), date("2009-01-01"))
+interval(date("2006-01-01"), date("2010-01-01"))
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/results/comparison/interval_order/interval_order.4.adm b/asterix-app/src/test/resources/runtimets/results/comparison/interval_order/interval_order.4.adm
index b8b3d7a..0ce3141 100644
--- a/asterix-app/src/test/resources/runtimets/results/comparison/interval_order/interval_order.4.adm
+++ b/asterix-app/src/test/resources/runtimets/results/comparison/interval_order/interval_order.4.adm
@@ -1,7 +1,7 @@
-interval-date("2006-01-01, 2010-01-01")
-interval-date("2002-01-01, 2010-01-01")
-interval-date("2001-01-01, 2010-01-01")
-interval-date("2004-01-01, 2009-01-01")
-interval-date("2003-01-01, 2008-01-01")
-interval-date("2003-01-01, 2008-01-01")
-interval-date("2002-01-01, 2003-01-01")
\ No newline at end of file
+interval(date("2006-01-01"), date("2010-01-01"))
+interval(date("2002-01-01"), date("2010-01-01"))
+interval(date("2001-01-01"), date("2010-01-01"))
+interval(date("2004-01-01"), date("2009-01-01"))
+interval(date("2003-01-01"), date("2008-01-01"))
+interval(date("2003-01-01"), date("2008-01-01"))
+interval(date("2002-01-01"), date("2003-01-01"))
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/results/constructor/interval/interval.1.adm b/asterix-app/src/test/resources/runtimets/results/constructor/interval/interval.1.adm
index d6c9c9b..63f9359 100644
--- a/asterix-app/src/test/resources/runtimets/results/constructor/interval/interval.1.adm
+++ b/asterix-app/src/test/resources/runtimets/results/constructor/interval/interval.1.adm
@@ -1 +1 @@
-{ "interval11": interval-date("2010-10-30, 2012-10-21"), "interval12": interval-date("2010-10-30, 2012-10-21"), "interval13": interval-date("2010-10-30, 2012-10-21"), "interval14": interval-date("2010-10-30, 2012-10-21"), "interval15": null, "interval16": null, "interval21": interval-time("14:04:05.678Z, 21:24:25.267Z"), "interval22": interval-time("14:04:05.678Z, 21:24:25.267Z"), "interval23": interval-time("14:04:05.678Z, 21:24:25.267Z"), "interval24": interval-time("14:04:05.678Z, 21:24:25.267Z"), "interval25": null, "interval26": null, "interval31": interval-datetime("-1987-11-18T18:43:57.938Z, 1999-11-12T19:49:35.948Z"), "interval32": interval-datetime("-1987-11-18T18:43:57.938Z, 1999-11-12T19:49:35.948Z"), "interval33": interval-datetime("-1987-11-18T18:43:57.938Z, 1999-11-12T19:49:35.948Z"), "interval34": interval-datetime("-1987-11-18T18:43:57.938Z, 1999-11-12T19:49:35.948Z"), "interval35": null, "interval36": null, "interval41": interval-date("0001-12-27, 0006-01-27
 "), "interval42": interval-date("0001-12-27, 0006-01-27"), "interval43": interval-date("0001-12-27, 0006-01-27"), "interval44": interval-date("0001-12-27, 0006-01-27"), "interval45": null, "interval46": null, "interval51": interval-time("20:03:20.948Z, 20:57:50.886Z"), "interval52": interval-time("20:03:20.948Z, 20:57:50.886Z"), "interval53": interval-time("20:03:20.948Z, 20:57:50.886Z"), "interval54": interval-time("20:03:20.948Z, 20:57:50.886Z"), "interval55": null, "interval56": null, "interval61": interval-datetime("-2043-11-19T15:32:39.293Z, -1603-03-12T12:12:38.242Z"), "interval62": interval-datetime("-2043-11-19T15:32:39.293Z, -1603-03-12T12:12:38.242Z"), "interval63": interval-datetime("-2043-11-19T15:32:39.293Z, -1603-03-12T12:12:38.242Z"), "interval64": interval-datetime("-2043-11-19T15:32:39.293Z, -1603-03-12T12:12:38.242Z"), "interval65": null, "interval66": null }
+{ "interval11": interval(date("2010-10-30"), date("2012-10-21")), "interval12": interval(date("2010-10-30"), date("2012-10-21")), "interval13": interval(date("2010-10-30"), date("2012-10-21")), "interval14": interval(date("2010-10-30"), date("2012-10-21")), "interval15": null, "interval16": null, "interval21": interval(time("14:04:05.678Z"), time("21:24:25.267Z")), "interval22": interval(time("14:04:05.678Z"), time("21:24:25.267Z")), "interval23": interval(time("14:04:05.678Z"), time("21:24:25.267Z")), "interval24": interval(time("14:04:05.678Z"), time("21:24:25.267Z")), "interval25": null, "interval26": null, "interval31": interval(datetime("-1987-11-18T18:43:57.938Z"), datetime("1999-11-12T19:49:35.948Z")), "interval32": interval(datetime("-1987-11-18T18:43:57.938Z"), datetime("1999-11-12T19:49:35.948Z")), "interval33": interval(datetime("-1987-11-18T18:43:57.938Z"), datetime("1999-11-12T19:49:35.948Z")), "interval34": interval(datetime("-1987-11-18T18:43:57.938Z"), dateti
 me("1999-11-12T19:49:35.948Z")), "interval35": null, "interval36": null, "interval41": interval(date("0001-12-27"), date("0006-01-27")), "interval42": interval(date("0001-12-27"), date("0006-01-27")), "interval43": interval(date("0001-12-27"), date("0006-01-27")), "interval44": interval(date("0001-12-27"), date("0006-01-27")), "interval45": null, "interval46": null, "interval51": interval(time("20:03:20.948Z"), time("20:57:50.886Z")), "interval52": interval(time("20:03:20.948Z"), time("20:57:50.886Z")), "interval53": interval(time("20:03:20.948Z"), time("20:57:50.886Z")), "interval54": interval(time("20:03:20.948Z"), time("20:57:50.886Z")), "interval55": null, "interval56": null, "interval61": interval(datetime("-2043-11-19T15:32:39.293Z"), datetime("-1603-03-12T12:12:38.242Z")), "interval62": interval(datetime("-2043-11-19T15:32:39.293Z"), datetime("-1603-03-12T12:12:38.242Z")), "interval63": interval(datetime("-2043-11-19T15:32:39.293Z"), datetime("-1603-03-12T12:12:38.242
 Z")), "interval64": interval(datetime("-2043-11-19T15:32:39.293Z"), datetime("-1603-03-12T12:12:38.242Z")), "interval65": null, "interval66": null, "interval71": interval(date("2010-10-30"), date("2012-10-21")), "interval72": null, "interval73": null, "interval74": interval(time("14:04:05.678Z"), time("21:24:25.267Z")), "interval75": null, "interval76": null, "interval77": interval(datetime("-1987-11-18T18:43:57.938Z"), datetime("1999-11-12T19:49:35.948Z")), "interval78": null, "interval79": null }
diff --git a/asterix-app/src/test/resources/runtimets/results/temporal/get_overlapping_interval/get_overlapping_interval.1.adm b/asterix-app/src/test/resources/runtimets/results/temporal/get_overlapping_interval/get_overlapping_interval.1.adm
index 4c3ce59..a6a2c22 100644
--- a/asterix-app/src/test/resources/runtimets/results/temporal/get_overlapping_interval/get_overlapping_interval.1.adm
+++ b/asterix-app/src/test/resources/runtimets/results/temporal/get_overlapping_interval/get_overlapping_interval.1.adm
@@ -1 +1 @@
-{ "overlap1": interval-time("12:23:39.000Z, 18:27:19.000Z"), "overlap2": null, "overlap3": null, "overlap4": interval-date("2013-01-01, 2014-01-01"), "overlap5": interval-datetime("1989-03-04T12:23:39.000Z, 2000-10-30T18:27:19.000Z"), "overlap6": null }
+{ "overlap1": interval(time("12:23:39.000Z"), time("18:27:19.000Z")), "overlap2": null, "overlap3": null, "overlap4": interval(date("2013-01-01"), date("2014-01-01")), "overlap5": interval(datetime("1989-03-04T12:23:39.000Z"), datetime("2000-10-30T18:27:19.000Z")), "overlap6": null }
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/results/temporal/insert_from_ext_ds/insert_from_ext_ds.1.adm b/asterix-app/src/test/resources/runtimets/results/temporal/insert_from_ext_ds/insert_from_ext_ds.1.adm
index 61de6de..5eb8905 100644
--- a/asterix-app/src/test/resources/runtimets/results/temporal/insert_from_ext_ds/insert_from_ext_ds.1.adm
+++ b/asterix-app/src/test/resources/runtimets/results/temporal/insert_from_ext_ds/insert_from_ext_ds.1.adm
@@ -1,4 +1,4 @@
-{ "date": date("-2012-12-12"), "time": time("23:49:12.390Z"), "datetime": datetime("2012-12-12T00:00:00.001Z"), "duration": duration("P20Y19DT4H14M23.34S"), "interval": interval-datetime("2012-12-12T00:00:00.001Z, 2013-08-10T22:10:15.398Z"), "ymduration": null, "dtduration": null }
-{ "date": null, "time": time("04:12:12.219Z"), "datetime": datetime("1920-12-21T11:29:18.478Z"), "duration": null, "interval": interval-time("04:29:30.000Z, 07:59:59.999Z"), "ymduration": null, "dtduration": null }
-{ "date": null, "time": null, "datetime": datetime("-0290-03-22T17:59:48.999Z"), "duration": duration("-P27Y148D"), "interval": interval-date("-2012-03-17, 2013-04-01"), "ymduration": null, "dtduration": null }
+{ "date": date("-2012-12-12"), "time": time("23:49:12.390Z"), "datetime": datetime("2012-12-12T00:00:00.001Z"), "duration": duration("P20Y19DT4H14M23.34S"), "interval": interval(datetime("2012-12-12T00:00:00.001Z"), datetime("2013-08-10T22:10:15.398Z")), "ymduration": null, "dtduration": null }
+{ "date": null, "time": time("04:12:12.219Z"), "datetime": datetime("1920-12-21T11:29:18.478Z"), "duration": null, "interval": interval(time("04:29:30.000Z"), time("07:59:59.999Z")), "ymduration": null, "dtduration": null }
+{ "date": null, "time": null, "datetime": datetime("-0290-03-22T17:59:48.999Z"), "duration": duration("-P27Y148D"), "interval": interval(date("-2012-03-17"), date("2013-04-01")), "ymduration": null, "dtduration": null }
 { "date": null, "time": null, "datetime": null, "duration": null, "interval": null, "ymduration": year-month-duration("P31Y2M"), "dtduration": day-time-duration("-P148D") }
diff --git a/asterix-app/src/test/resources/runtimets/results/temporal/insert_from_ext_ds_2/insert_from_ext_ds_2.1.adm b/asterix-app/src/test/resources/runtimets/results/temporal/insert_from_ext_ds_2/insert_from_ext_ds_2.1.adm
index 2c485e2..2b03194 100644
--- a/asterix-app/src/test/resources/runtimets/results/temporal/insert_from_ext_ds_2/insert_from_ext_ds_2.1.adm
+++ b/asterix-app/src/test/resources/runtimets/results/temporal/insert_from_ext_ds_2/insert_from_ext_ds_2.1.adm
@@ -1,3 +1,3 @@
-{ "date": date("-9971-09-24"), "time": time("11:38:17.154Z"), "datetime": datetime("1259-11-13T09:49:11.852Z"), "duration": duration("P473653Y9M4566143DT10H20M53.61S"), "year-month-duration": year-month-duration("P148233Y10M"), "day-time-duration": day-time-duration("-P7236357DT2H56M56.164S"), "date-interval": interval-date("-0255-09-06, 4925-05-03"), "time-interval": interval-time("12:10:45.169Z, 15:37:48.736Z"), "datetime-interval": interval-datetime("0534-12-08T08:20:31.487Z, 6778-02-16T22:40:21.653Z") }
-{ "date": date("4619-11-23"), "time": time("14:29:36.786Z"), "datetime": datetime("2749-01-27T17:27:30.020Z"), "duration": duration("-P474133Y7M854630DT4H40M6.45S"), "year-month-duration": year-month-duration("P193989Y3M"), "day-time-duration": day-time-duration("P4477686DT4H49M31.87S"), "date-interval": interval-date("-9537-08-04, 9656-06-03"), "time-interval": interval-time("12:04:45.689Z, 12:41:59.002Z"), "datetime-interval": interval-datetime("-2640-10-11T17:32:15.675Z, 4104-02-01T05:59:11.902Z") }
-{ "date": date("7986-11-25"), "time": time("12:49:39.736Z"), "datetime": datetime("-8337-01-30T15:23:07.598Z"), "duration": duration("-P184484Y7M2241423DT10H42M49.500S"), "year-month-duration": year-month-duration("-P546031Y3M"), "day-time-duration": day-time-duration("P2623386DT10H32M31.983S"), "date-interval": interval-date("-4514-05-24, 3337-08-26"), "time-interval": interval-time("04:16:42.321Z, 12:22:56.816Z"), "datetime-interval": interval-datetime("2129-12-12T13:18:35.758Z, 8647-07-01T13:10:19.691Z") }
+{ "date": date("-9971-09-24"), "time": time("11:38:17.154Z"), "datetime": datetime("1259-11-13T09:49:11.852Z"), "duration": duration("P473653Y9M4566143DT10H20M53.61S"), "year-month-duration": year-month-duration("P148233Y10M"), "day-time-duration": day-time-duration("-P7236357DT2H56M56.164S"), "date-interval": interval(date("-0255-09-06"), date("4925-05-03")), "time-interval": interval(time("12:10:45.169Z"), time("15:37:48.736Z")), "datetime-interval": interval(datetime("0534-12-08T08:20:31.487Z"), datetime("6778-02-16T22:40:21.653Z")) }
+{ "date": date("4619-11-23"), "time": time("14:29:36.786Z"), "datetime": datetime("2749-01-27T17:27:30.020Z"), "duration": duration("-P474133Y7M854630DT4H40M6.45S"), "year-month-duration": year-month-duration("P193989Y3M"), "day-time-duration": day-time-duration("P4477686DT4H49M31.87S"), "date-interval": interval(date("-9537-08-04"), date("9656-06-03")), "time-interval": interval(time("12:04:45.689Z"), time("12:41:59.002Z")), "datetime-interval": interval(datetime("-2640-10-11T17:32:15.675Z"), datetime("4104-02-01T05:59:11.902Z")) }
+{ "date": date("7986-11-25"), "time": time("12:49:39.736Z"), "datetime": datetime("-8337-01-30T15:23:07.598Z"), "duration": duration("-P184484Y7M2241423DT10H42M49.500S"), "year-month-duration": year-month-duration("-P546031Y3M"), "day-time-duration": day-time-duration("P2623386DT10H32M31.983S"), "date-interval": interval(date("-4514-05-24"), date("3337-08-26")), "time-interval": interval(time("04:16:42.321Z"), time("12:22:56.816Z")), "datetime-interval": interval(datetime("2129-12-12T13:18:35.758Z"), datetime("8647-07-01T13:10:19.691Z")) }
diff --git a/asterix-app/src/test/resources/runtimets/results/temporal/interval_bin/interval_bin.1.adm b/asterix-app/src/test/resources/runtimets/results/temporal/interval_bin/interval_bin.1.adm
index 46fbfa5..8c95d98 100644
--- a/asterix-app/src/test/resources/runtimets/results/temporal/interval_bin/interval_bin.1.adm
+++ b/asterix-app/src/test/resources/runtimets/results/temporal/interval_bin/interval_bin.1.adm
@@ -1 +1 @@
-{ "bin1": interval-date("2010-01-01, 2011-01-01"), "bin2": interval-date("2010-01-01, 2011-01-01"), "bin3": interval-datetime("-1987-07-01T00:00:00.000Z, -1986-01-01T00:00:00.000Z"), "bin4": interval-datetime("-1987-11-19T12:00:00.000Z, -1987-11-20T00:00:00.000Z"), "bin5": interval-time("04:00:00.000Z, 06:00:00.000Z"), "bin6": null, "bin7": null, "bin8": null }
+{ "bin1": interval(date("2010-01-01"), date("2011-01-01")), "bin2": interval(date("2010-01-01"), date("2011-01-01")), "bin3": interval(datetime("-1987-07-01T00:00:00.000Z"), datetime("-1986-01-01T00:00:00.000Z")), "bin4": interval(datetime("-1987-11-19T12:00:00.000Z"), datetime("-1987-11-20T00:00:00.000Z")), "bin5": interval(time("04:00:00.000Z"), time("06:00:00.000Z")), "bin6": null, "bin7": null, "bin8": null }
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/results/temporal/interval_bin_gby_0/interval_bin_gby_0.1.adm b/asterix-app/src/test/resources/runtimets/results/temporal/interval_bin_gby_0/interval_bin_gby_0.1.adm
index 7902191..aa0f939 100644
--- a/asterix-app/src/test/resources/runtimets/results/temporal/interval_bin_gby_0/interval_bin_gby_0.1.adm
+++ b/asterix-app/src/test/resources/runtimets/results/temporal/interval_bin_gby_0/interval_bin_gby_0.1.adm
@@ -1,4 +1,4 @@
-{ "tbin": interval-datetime("-1990-01-01T00:00:00.000Z, -1970-01-01T00:00:00.000Z"), "count": 4 }
-{ "tbin": interval-datetime("-0990-01-01T00:00:00.000Z, -0970-01-01T00:00:00.000Z"), "count": 1 }
-{ "tbin": interval-datetime("1970-01-01T00:00:00.000Z, 1990-01-01T00:00:00.000Z"), "count": 5 }
-{ "tbin": interval-datetime("2010-01-01T00:00:00.000Z, 2030-01-01T00:00:00.000Z"), "count": 2 }
+{ "tbin": interval(datetime("-1990-01-01T00:00:00.000Z"), datetime("-1970-01-01T00:00:00.000Z")), "count": 4 }
+{ "tbin": interval(datetime("-0990-01-01T00:00:00.000Z"), datetime("-0970-01-01T00:00:00.000Z")), "count": 1 }
+{ "tbin": interval(datetime("1970-01-01T00:00:00.000Z"), datetime("1990-01-01T00:00:00.000Z")), "count": 5 }
+{ "tbin": interval(datetime("2010-01-01T00:00:00.000Z"), datetime("2030-01-01T00:00:00.000Z")), "count": 2 }
diff --git a/asterix-app/src/test/resources/runtimets/results/temporal/interval_bin_gby_1/interval_bin_gby_1.1.adm b/asterix-app/src/test/resources/runtimets/results/temporal/interval_bin_gby_1/interval_bin_gby_1.1.adm
index 3ff3ce0..37fb65f 100644
--- a/asterix-app/src/test/resources/runtimets/results/temporal/interval_bin_gby_1/interval_bin_gby_1.1.adm
+++ b/asterix-app/src/test/resources/runtimets/results/temporal/interval_bin_gby_1/interval_bin_gby_1.1.adm
@@ -1,8 +1,8 @@
-{ "tbin": interval-time("00:20:00.000Z, 00:30:00.000Z"), "count": 1 }
-{ "tbin": interval-time("09:30:00.000Z, 09:40:00.000Z"), "count": 1 }
-{ "tbin": interval-time("17:20:00.000Z, 17:30:00.000Z"), "count": 1 }
-{ "tbin": interval-time("18:00:00.000Z, 18:10:00.000Z"), "count": 1 }
-{ "tbin": interval-time("23:20:00.000Z, 23:30:00.000Z"), "count": 1 }
-{ "tbin": interval-time("23:30:00.000Z, 23:40:00.000Z"), "count": 1 }
-{ "tbin": interval-time("23:40:00.000Z, 23:50:00.000Z"), "count": 5 }
-{ "tbin": interval-time("23:50:00.000Z, 00:00:00.000Z"), "count": 1 }
+{ "tbin": interval(time("00:20:00.000Z"), time("00:30:00.000Z")), "count": 1 }
+{ "tbin": interval(time("09:30:00.000Z"), time("09:40:00.000Z")), "count": 1 }
+{ "tbin": interval(time("17:20:00.000Z"), time("17:30:00.000Z")), "count": 1 }
+{ "tbin": interval(time("18:00:00.000Z"), time("18:10:00.000Z")), "count": 1 }
+{ "tbin": interval(time("23:20:00.000Z"), time("23:30:00.000Z")), "count": 1 }
+{ "tbin": interval(time("23:30:00.000Z"), time("23:40:00.000Z")), "count": 1 }
+{ "tbin": interval(time("23:40:00.000Z"), time("23:50:00.000Z")), "count": 5 }
+{ "tbin": interval(time("23:50:00.000Z"), time("00:00:00.000Z")), "count": 1 }
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/results/temporal/overlap_bins/overlap_bins.1.adm b/asterix-app/src/test/resources/runtimets/results/temporal/overlap_bins/overlap_bins.1.adm
index 88f2be1..a17ee5e 100644
--- a/asterix-app/src/test/resources/runtimets/results/temporal/overlap_bins/overlap_bins.1.adm
+++ b/asterix-app/src/test/resources/runtimets/results/temporal/overlap_bins/overlap_bins.1.adm
@@ -1 +1 @@
-{ "timebins": [ interval-time("17:00:00.000Z, 17:30:00.000Z"), interval-time("17:30:00.000Z, 18:00:00.000Z"), interval-time("18:00:00.000Z, 18:30:00.000Z"), interval-time("18:30:00.000Z, 19:00:00.000Z") ], "datebins": [ interval-date("1970-01-01, 1990-01-01"), interval-date("1990-01-01, 2010-01-01"), interval-date("2010-01-01, 2030-01-01") ], "datetimebins": [ interval-datetime("1800-01-01T00:00:00.000Z, 1900-01-01T00:00:00.000Z"), interval-datetime("1900-01-01T00:00:00.000Z, 2000-01-01T00:00:00.000Z"), interval-datetime("2000-01-01T00:00:00.000Z, 2100-01-01T00:00:00.000Z") ] }
+{ "timebins": [ interval(time("17:00:00.000Z"), time("17:30:00.000Z")), interval(time("17:30:00.000Z"), time("18:00:00.000Z")), interval(time("18:00:00.000Z"), time("18:30:00.000Z")), interval(time("18:30:00.000Z"), time("19:00:00.000Z")) ], "datebins": [ interval(date("1970-01-01"), date("1990-01-01")), interval(date("1990-01-01"), date("2010-01-01")), interval(date("2010-01-01"), date("2030-01-01")) ], "datetimebins": [ interval(datetime("1800-01-01T00:00:00.000Z"), datetime("1900-01-01T00:00:00.000Z")), interval(datetime("1900-01-01T00:00:00.000Z"), datetime("2000-01-01T00:00:00.000Z")), interval(datetime("2000-01-01T00:00:00.000Z"), datetime("2100-01-01T00:00:00.000Z")) ] }
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/results/temporal/overlap_bins_gby_0/overlap_bins_gby_0.1.adm b/asterix-app/src/test/resources/runtimets/results/temporal/overlap_bins_gby_0/overlap_bins_gby_0.1.adm
index 5402cb5..551e054 100644
--- a/asterix-app/src/test/resources/runtimets/results/temporal/overlap_bins_gby_0/overlap_bins_gby_0.1.adm
+++ b/asterix-app/src/test/resources/runtimets/results/temporal/overlap_bins_gby_0/overlap_bins_gby_0.1.adm
@@ -1,23 +1,23 @@
-{ "tbin": interval-time("00:00:00.000Z, 01:30:00.000Z"), "interval": interval-time("00:27:13.432Z, 01:27:13.432Z"), "overlap": interval-time("00:27:13.432Z, 01:27:13.432Z") }
-{ "tbin": interval-time("07:30:00.000Z, 09:00:00.000Z"), "interval": interval-time("07:49:23.938Z, 10:49:23.938Z"), "overlap": interval-time("07:49:23.938Z, 09:00:00.000Z") }
-{ "tbin": interval-time("09:00:00.000Z, 10:30:00.000Z"), "interval": interval-time("07:49:23.938Z, 10:49:23.938Z"), "overlap": interval-time("09:00:00.000Z, 10:30:00.000Z") }
-{ "tbin": interval-time("09:00:00.000Z, 10:30:00.000Z"), "interval": interval-time("09:35:28.039Z, 20:25:28.039Z"), "overlap": interval-time("09:35:28.039Z, 10:30:00.000Z") }
-{ "tbin": interval-time("10:30:00.000Z, 12:00:00.000Z"), "interval": interval-time("07:49:23.938Z, 10:49:23.938Z"), "overlap": interval-time("10:30:00.000Z, 10:49:23.938Z") }
-{ "tbin": interval-time("10:30:00.000Z, 12:00:00.000Z"), "interval": interval-time("09:35:28.039Z, 20:25:28.039Z"), "overlap": interval-time("10:30:00.000Z, 12:00:00.000Z") }
-{ "tbin": interval-time("12:00:00.000Z, 13:30:00.000Z"), "interval": interval-time("09:35:28.039Z, 20:25:28.039Z"), "overlap": interval-time("12:00:00.000Z, 13:30:00.000Z") }
-{ "tbin": interval-time("12:00:00.000Z, 13:30:00.000Z"), "interval": interval-time("12:49:23.938Z, 15:49:23.938Z"), "overlap": interval-time("12:49:23.938Z, 13:30:00.000Z") }
-{ "tbin": interval-time("13:30:00.000Z, 15:00:00.000Z"), "interval": interval-time("09:35:28.039Z, 20:25:28.039Z"), "overlap": interval-time("13:30:00.000Z, 15:00:00.000Z") }
-{ "tbin": interval-time("13:30:00.000Z, 15:00:00.000Z"), "interval": interval-time("12:49:23.938Z, 15:49:23.938Z"), "overlap": interval-time("13:30:00.000Z, 15:00:00.000Z") }
-{ "tbin": interval-time("15:00:00.000Z, 16:30:00.000Z"), "interval": interval-time("09:35:28.039Z, 20:25:28.039Z"), "overlap": interval-time("15:00:00.000Z, 16:30:00.000Z") }
-{ "tbin": interval-time("15:00:00.000Z, 16:30:00.000Z"), "interval": interval-time("12:49:23.938Z, 15:49:23.938Z"), "overlap": interval-time("15:00:00.000Z, 15:49:23.938Z") }
-{ "tbin": interval-time("16:30:00.000Z, 18:00:00.000Z"), "interval": interval-time("09:35:28.039Z, 20:25:28.039Z"), "overlap": interval-time("16:30:00.000Z, 18:00:00.000Z") }
-{ "tbin": interval-time("16:30:00.000Z, 18:00:00.000Z"), "interval": interval-time("17:28:13.900Z, 17:28:32.900Z"), "overlap": interval-time("17:28:13.900Z, 17:28:32.900Z") }
-{ "tbin": interval-time("18:00:00.000Z, 19:30:00.000Z"), "interval": interval-time("09:35:28.039Z, 20:25:28.039Z"), "overlap": interval-time("18:00:00.000Z, 19:30:00.000Z") }
-{ "tbin": interval-time("18:00:00.000Z, 19:30:00.000Z"), "interval": interval-time("18:00:00.000Z, 20:00:00.000Z"), "overlap": interval-time("18:00:00.000Z, 19:30:00.000Z") }
-{ "tbin": interval-time("19:30:00.000Z, 21:00:00.000Z"), "interval": interval-time("09:35:28.039Z, 20:25:28.039Z"), "overlap": interval-time("19:30:00.000Z, 20:25:28.039Z") }
-{ "tbin": interval-time("19:30:00.000Z, 21:00:00.000Z"), "interval": interval-time("18:00:00.000Z, 20:00:00.000Z"), "overlap": interval-time("19:30:00.000Z, 20:00:00.000Z") }
-{ "tbin": interval-time("22:30:00.000Z, 00:00:00.000Z"), "interval": interval-time("23:22:38.000Z, 23:42:38.000Z"), "overlap": interval-time("23:22:38.000Z, 23:42:38.000Z") }
-{ "tbin": interval-time("22:30:00.000Z, 00:00:00.000Z"), "interval": interval-time("23:30:00.000Z, 23:32:00.000Z"), "overlap": interval-time("23:30:00.000Z, 23:32:00.000Z") }
-{ "tbin": interval-time("22:30:00.000Z, 00:00:00.000Z"), "interval": interval-time("23:49:23.938Z, 23:54:23.938Z"), "overlap": interval-time("23:49:23.938Z, 23:54:23.938Z") }
-{ "tbin": interval-time("22:30:00.000Z, 00:00:00.000Z"), "interval": interval-time("23:49:33.938Z, 23:50:03.938Z"), "overlap": interval-time("23:49:33.938Z, 23:50:03.938Z") }
-{ "tbin": interval-time("22:30:00.000Z, 00:00:00.000Z"), "interval": interval-time("23:58:17.038Z, 23:58:56.420Z"), "overlap": interval-time("23:58:17.038Z, 23:58:56.420Z") }
+{ "tbin": interval(time("00:00:00.000Z"), time("01:30:00.000Z")), "interval": interval(time("00:27:13.432Z"), time("01:27:13.432Z")), "overlap": interval(time("00:27:13.432Z"), time("01:27:13.432Z")) }
+{ "tbin": interval(time("07:30:00.000Z"), time("09:00:00.000Z")), "interval": interval(time("07:49:23.938Z"), time("10:49:23.938Z")), "overlap": interval(time("07:49:23.938Z"), time("09:00:00.000Z")) }
+{ "tbin": interval(time("09:00:00.000Z"), time("10:30:00.000Z")), "interval": interval(time("07:49:23.938Z"), time("10:49:23.938Z")), "overlap": interval(time("09:00:00.000Z"), time("10:30:00.000Z")) }
+{ "tbin": interval(time("09:00:00.000Z"), time("10:30:00.000Z")), "interval": interval(time("09:35:28.039Z"), time("20:25:28.039Z")), "overlap": interval(time("09:35:28.039Z"), time("10:30:00.000Z")) }
+{ "tbin": interval(time("10:30:00.000Z"), time("12:00:00.000Z")), "interval": interval(time("07:49:23.938Z"), time("10:49:23.938Z")), "overlap": interval(time("10:30:00.000Z"), time("10:49:23.938Z")) }
+{ "tbin": interval(time("10:30:00.000Z"), time("12:00:00.000Z")), "interval": interval(time("09:35:28.039Z"), time("20:25:28.039Z")), "overlap": interval(time("10:30:00.000Z"), time("12:00:00.000Z")) }
+{ "tbin": interval(time("12:00:00.000Z"), time("13:30:00.000Z")), "interval": interval(time("09:35:28.039Z"), time("20:25:28.039Z")), "overlap": interval(time("12:00:00.000Z"), time("13:30:00.000Z")) }
+{ "tbin": interval(time("12:00:00.000Z"), time("13:30:00.000Z")), "interval": interval(time("12:49:23.938Z"), time("15:49:23.938Z")), "overlap": interval(time("12:49:23.938Z"), time("13:30:00.000Z")) }
+{ "tbin": interval(time("13:30:00.000Z"), time("15:00:00.000Z")), "interval": interval(time("09:35:28.039Z"), time("20:25:28.039Z")), "overlap": interval(time("13:30:00.000Z"), time("15:00:00.000Z")) }
+{ "tbin": interval(time("13:30:00.000Z"), time("15:00:00.000Z")), "interval": interval(time("12:49:23.938Z"), time("15:49:23.938Z")), "overlap": interval(time("13:30:00.000Z"), time("15:00:00.000Z")) }
+{ "tbin": interval(time("15:00:00.000Z"), time("16:30:00.000Z")), "interval": interval(time("09:35:28.039Z"), time("20:25:28.039Z")), "overlap": interval(time("15:00:00.000Z"), time("16:30:00.000Z")) }
+{ "tbin": interval(time("15:00:00.000Z"), time("16:30:00.000Z")), "interval": interval(time("12:49:23.938Z"), time("15:49:23.938Z")), "overlap": interval(time("15:00:00.000Z"), time("15:49:23.938Z")) }
+{ "tbin": interval(time("16:30:00.000Z"), time("18:00:00.000Z")), "interval": interval(time("09:35:28.039Z"), time("20:25:28.039Z")), "overlap": interval(time("16:30:00.000Z"), time("18:00:00.000Z")) }
+{ "tbin": interval(time("16:30:00.000Z"), time("18:00:00.000Z")), "interval": interval(time("17:28:13.900Z"), time("17:28:32.900Z")), "overlap": interval(time("17:28:13.900Z"), time("17:28:32.900Z")) }
+{ "tbin": interval(time("18:00:00.000Z"), time("19:30:00.000Z")), "interval": interval(time("09:35:28.039Z"), time("20:25:28.039Z")), "overlap": interval(time("18:00:00.000Z"), time("19:30:00.000Z")) }
+{ "tbin": interval(time("18:00:00.000Z"), time("19:30:00.000Z")), "interval": interval(time("18:00:00.000Z"), time("20:00:00.000Z")), "overlap": interval(time("18:00:00.000Z"), time("19:30:00.000Z")) }
+{ "tbin": interval(time("19:30:00.000Z"), time("21:00:00.000Z")), "interval": interval(time("09:35:28.039Z"), time("20:25:28.039Z")), "overlap": interval(time("19:30:00.000Z"), time("20:25:28.039Z")) }
+{ "tbin": interval(time("19:30:00.000Z"), time("21:00:00.000Z")), "interval": interval(time("18:00:00.000Z"), time("20:00:00.000Z")), "overlap": interval(time("19:30:00.000Z"), time("20:00:00.000Z")) }
+{ "tbin": interval(time("22:30:00.000Z"), time("00:00:00.000Z")), "interval": interval(time("23:22:38.000Z"), time("23:42:38.000Z")), "overlap": interval(time("23:22:38.000Z"), time("23:42:38.000Z")) }
+{ "tbin": interval(time("22:30:00.000Z"), time("00:00:00.000Z")), "interval": interval(time("23:30:00.000Z"), time("23:32:00.000Z")), "overlap": interval(time("23:30:00.000Z"), time("23:32:00.000Z")) }
+{ "tbin": interval(time("22:30:00.000Z"), time("00:00:00.000Z")), "interval": interval(time("23:49:23.938Z"), time("23:54:23.938Z")), "overlap": interval(time("23:49:23.938Z"), time("23:54:23.938Z")) }
+{ "tbin": interval(time("22:30:00.000Z"), time("00:00:00.000Z")), "interval": interval(time("23:49:33.938Z"), time("23:50:03.938Z")), "overlap": interval(time("23:49:33.938Z"), time("23:50:03.938Z")) }
+{ "tbin": interval(time("22:30:00.000Z"), time("00:00:00.000Z")), "interval": interval(time("23:58:17.038Z"), time("23:58:56.420Z")), "overlap": interval(time("23:58:17.038Z"), time("23:58:56.420Z")) }
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/results/temporal/overlap_bins_gby_1/overlap_bins_gby_1.1.adm b/asterix-app/src/test/resources/runtimets/results/temporal/overlap_bins_gby_1/overlap_bins_gby_1.1.adm
index 9de6522..bd05dab 100644
--- a/asterix-app/src/test/resources/runtimets/results/temporal/overlap_bins_gby_1/overlap_bins_gby_1.1.adm
+++ b/asterix-app/src/test/resources/runtimets/results/temporal/overlap_bins_gby_1/overlap_bins_gby_1.1.adm
@@ -1,11 +1,11 @@
-{ "timebin": interval-time("00:00:00.000Z, 01:30:00.000Z"), "count": 1, "total_ms": 3600000 }
-{ "timebin": interval-time("07:30:00.000Z, 09:00:00.000Z"), "count": 1, "total_ms": 4236062 }
-{ "timebin": interval-time("09:00:00.000Z, 10:30:00.000Z"), "count": 2, "total_ms": 8671961 }
-{ "timebin": interval-time("10:30:00.000Z, 12:00:00.000Z"), "count": 2, "total_ms": 6563938 }
-{ "timebin": interval-time("12:00:00.000Z, 13:30:00.000Z"), "count": 2, "total_ms": 7836062 }
-{ "timebin": interval-time("13:30:00.000Z, 15:00:00.000Z"), "count": 2, "total_ms": 10800000 }
-{ "timebin": interval-time("15:00:00.000Z, 16:30:00.000Z"), "count": 2, "total_ms": 8363938 }
-{ "timebin": interval-time("16:30:00.000Z, 18:00:00.000Z"), "count": 2, "total_ms": 5419000 }
-{ "timebin": interval-time("18:00:00.000Z, 19:30:00.000Z"), "count": 2, "total_ms": 10800000 }
-{ "timebin": interval-time("19:30:00.000Z, 21:00:00.000Z"), "count": 2, "total_ms": 5128039 }
-{ "timebin": interval-time("22:30:00.000Z, 00:00:00.000Z"), "count": 5, "total_ms": 1689382 }
+{ "timebin": interval(time("00:00:00.000Z"), time("01:30:00.000Z")), "count": 1, "total_ms": 3600000 }
+{ "timebin": interval(time("07:30:00.000Z"), time("09:00:00.000Z")), "count": 1, "total_ms": 4236062 }
+{ "timebin": interval(time("09:00:00.000Z"), time("10:30:00.000Z")), "count": 2, "total_ms": 8671961 }
+{ "timebin": interval(time("10:30:00.000Z"), time("12:00:00.000Z")), "count": 2, "total_ms": 6563938 }
+{ "timebin": interval(time("12:00:00.000Z"), time("13:30:00.000Z")), "count": 2, "total_ms": 7836062 }
+{ "timebin": interval(time("13:30:00.000Z"), time("15:00:00.000Z")), "count": 2, "total_ms": 10800000 }
+{ "timebin": interval(time("15:00:00.000Z"), time("16:30:00.000Z")), "count": 2, "total_ms": 8363938 }
+{ "timebin": interval(time("16:30:00.000Z"), time("18:00:00.000Z")), "count": 2, "total_ms": 5419000 }
+{ "timebin": interval(time("18:00:00.000Z"), time("19:30:00.000Z")), "count": 2, "total_ms": 10800000 }
+{ "timebin": interval(time("19:30:00.000Z"), time("21:00:00.000Z")), "count": 2, "total_ms": 5128039 }
+{ "timebin": interval(time("22:30:00.000Z"), time("00:00:00.000Z")), "count": 5, "total_ms": 1689382 }
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/results/temporal/overlap_bins_gby_3/overlap_bins_gby_3.1.adm b/asterix-app/src/test/resources/runtimets/results/temporal/overlap_bins_gby_3/overlap_bins_gby_3.1.adm
index c1ffd9b..c05bf9d 100644
--- a/asterix-app/src/test/resources/runtimets/results/temporal/overlap_bins_gby_3/overlap_bins_gby_3.1.adm
+++ b/asterix-app/src/test/resources/runtimets/results/temporal/overlap_bins_gby_3/overlap_bins_gby_3.1.adm
@@ -1,42 +1,42 @@
-{ "timebin": interval-time("10:27:00.000Z, 10:28:00.000Z"), "subgroups": [ { "subgid": "Email", "item_count": 2 }, { "subgid": "Facebook", "item_count": 2 } ] }
-{ "timebin": interval-time("10:28:00.000Z, 10:29:00.000Z"), "subgroups": [ { "subgid": "Facebook", "item_count": 1 } ] }
-{ "timebin": interval-time("10:29:00.000Z, 10:30:00.000Z"), "subgroups": [ { "subgid": "Email", "item_count": 1 }, { "subgid": "Facebook", "item_count": 2 } ] }
-{ "timebin": interval-time("10:30:00.000Z, 10:31:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("10:31:00.000Z, 10:32:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("10:32:00.000Z, 10:33:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("10:33:00.000Z, 10:34:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("10:34:00.000Z, 10:35:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("10:35:00.000Z, 10:36:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("10:36:00.000Z, 10:37:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("10:37:00.000Z, 10:38:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("10:38:00.000Z, 10:39:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("10:39:00.000Z, 10:40:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("10:40:00.000Z, 10:41:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("10:41:00.000Z, 10:42:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("10:42:00.000Z, 10:43:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("10:43:00.000Z, 10:44:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("10:44:00.000Z, 10:45:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("10:45:00.000Z, 10:46:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("10:46:00.000Z, 10:47:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("10:47:00.000Z, 10:48:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("10:48:00.000Z, 10:49:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("10:49:00.000Z, 10:50:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("10:50:00.000Z, 10:51:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("10:51:00.000Z, 10:52:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("10:52:00.000Z, 10:53:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("10:53:00.000Z, 10:54:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("10:54:00.000Z, 10:55:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("10:55:00.000Z, 10:56:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("10:56:00.000Z, 10:57:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("10:57:00.000Z, 10:58:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("10:58:00.000Z, 10:59:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("10:59:00.000Z, 11:00:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("11:00:00.000Z, 11:01:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("11:01:00.000Z, 11:02:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("11:02:00.000Z, 11:03:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("11:03:00.000Z, 11:04:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("11:04:00.000Z, 11:05:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("11:05:00.000Z, 11:06:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("11:06:00.000Z, 11:07:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("11:07:00.000Z, 11:08:00.000Z"), "subgroups": [ { "subgid": "Email", "item_count": 2 } ] }
-{ "timebin": interval-time("11:08:00.000Z, 11:09:00.000Z"), "subgroups": [  ] }
+{ "timebin": interval(time("10:27:00.000Z"), time("10:28:00.000Z")), "subgroups": [ { "subgid": null, "item_count": 0 }, { "subgid": "Email", "item_count": 2 }, { "subgid": "Facebook", "item_count": 2 } ] }
+{ "timebin": interval(time("10:28:00.000Z"), time("10:29:00.000Z")), "subgroups": [ { "subgid": null, "item_count": 0 }, { "subgid": "Facebook", "item_count": 1 } ] }
+{ "timebin": interval(time("10:29:00.000Z"), time("10:30:00.000Z")), "subgroups": [ { "subgid": null, "item_count": 0 }, { "subgid": "Email", "item_count": 1 }, { "subgid": "Facebook", "item_count": 2 } ] }
+{ "timebin": interval(time("10:30:00.000Z"), time("10:31:00.000Z")), "subgroups": [ { "subgid": null, "item_count": 0 } ] }
+{ "timebin": interval(time("10:31:00.000Z"), time("10:32:00.000Z")), "subgroups": [ { "subgid": null, "item_count": 0 } ] }
+{ "timebin": interval(time("10:32:00.000Z"), time("10:33:00.000Z")), "subgroups": [ { "subgid": null, "item_count": 0 } ] }
+{ "timebin": interval(time("10:33:00.000Z"), time("10:34:00.000Z")), "subgroups": [ { "subgid": null, "item_count": 0 } ] }
+{ "timebin": interval(time("10:34:00.000Z"), time("10:35:00.000Z")), "subgroups": [ { "subgid": null, "item_count": 0 } ] }
+{ "timebin": interval(time("10:35:00.000Z"), time("10:36:00.000Z")), "subgroups": [ { "subgid": null, "item_count": 0 } ] }
+{ "timebin": interval(time("10:36:00.000Z"), time("10:37:00.000Z")), "subgroups": [ { "subgid": null, "item_count": 0 } ] }
+{ "timebin": interval(time("10:37:00.000Z"), time("10:38:00.000Z")), "subgroups": [ { "subgid": null, "item_count": 0 } ] }
+{ "timebin": interval(time("10:38:00.000Z"), time("10:39:00.000Z")), "subgroups": [ { "subgid": null, "item_count": 0 } ] }
+{ "timebin": interval(time("10:39:00.000Z"), time("10:40:00.000Z")), "subgroups": [ { "subgid": null, "item_count": 0 } ] }
+{ "timebin": interval(time("10:40:00.000Z"), time("10:41:00.000Z")), "subgroups": [ { "subgid": null, "item_count": 0 } ] }
+{ "timebin": interval(time("10:41:00.000Z"), time("10:42:00.000Z")), "subgroups": [ { "subgid": null, "item_count": 0 } ] }
+{ "timebin": interval(time("10:42:00.000Z"), time("10:43:00.000Z")), "subgroups": [ { "subgid": null, "item_count": 0 } ] }
+{ "timebin": interval(time("10:43:00.000Z"), time("10:44:00.000Z")), "subgroups": [ { "subgid": null, "item_count": 0 } ] }
+{ "timebin": interval(time("10:44:00.000Z"), time("10:45:00.000Z")), "subgroups": [ { "subgid": null, "item_count": 0 } ] }
+{ "timebin": interval(time("10:45:00.000Z"), time("10:46:00.000Z")), "subgroups": [ { "subgid": null, "item_count": 0 } ] }
+{ "timebin": interval(time("10:46:00.000Z"), time("10:47:00.000Z")), "subgroups": [ { "subgid": null, "item_count": 0 } ] }
+{ "timebin": interval(time("10:47:00.000Z"), time("10:48:00.000Z")), "subgroups": [ { "subgid": null, "item_count": 0 } ] }
+{ "timebin": interval(time("10:48:00.000Z"), time("10:49:00.000Z")), "subgroups": [ { "subgid": null, "item_count": 0 } ] }
+{ "timebin": interval(time("10:49:00.000Z"), time("10:50:00.000Z")), "subgroups": [ { "subgid": null, "item_count": 0 } ] }
+{ "timebin": interval(time("10:50:00.000Z"), time("10:51:00.000Z")), "subgroups": [ { "subgid": null, "item_count": 0 } ] }
+{ "timebin": interval(time("10:51:00.000Z"), time("10:52:00.000Z")), "subgroups": [ { "subgid": null, "item_count": 0 } ] }
+{ "timebin": interval(time("10:52:00.000Z"), time("10:53:00.000Z")), "subgroups": [ { "subgid": null, "item_count": 0 } ] }
+{ "timebin": interval(time("10:53:00.000Z"), time("10:54:00.000Z")), "subgroups": [ { "subgid": null, "item_count": 0 } ] }
+{ "timebin": interval(time("10:54:00.000Z"), time("10:55:00.000Z")), "subgroups": [ { "subgid": null, "item_count": 0 } ] }
+{ "timebin": interval(time("10:55:00.000Z"), time("10:56:00.000Z")), "subgroups": [ { "subgid": null, "item_count": 0 } ] }
+{ "timebin": interval(time("10:56:00.000Z"), time("10:57:00.000Z")), "subgroups": [ { "subgid": null, "item_count": 0 } ] }
+{ "timebin": interval(time("10:57:00.000Z"), time("10:58:00.000Z")), "subgroups": [ { "subgid": null, "item_count": 0 } ] }
+{ "timebin": interval(time("10:58:00.000Z"), time("10:59:00.000Z")), "subgroups": [ { "subgid": null, "item_count": 0 } ] }
+{ "timebin": interval(time("10:59:00.000Z"), time("11:00:00.000Z")), "subgroups": [ { "subgid": null, "item_count": 0 } ] }
+{ "timebin": interval(time("11:00:00.000Z"), time("11:01:00.000Z")), "subgroups": [ { "subgid": null, "item_count": 0 } ] }
+{ "timebin": interval(time("11:01:00.000Z"), time("11:02:00.000Z")), "subgroups": [ { "subgid": null, "item_count": 0 } ] }
+{ "timebin": interval(time("11:02:00.000Z"), time("11:03:00.000Z")), "subgroups": [ { "subgid": null, "item_count": 0 } ] }
+{ "timebin": interval(time("11:03:00.000Z"), time("11:04:00.000Z")), "subgroups": [ { "subgid": null, "item_count": 0 } ] }
+{ "timebin": interval(time("11:04:00.000Z"), time("11:05:00.000Z")), "subgroups": [ { "subgid": null, "item_count": 0 } ] }
+{ "timebin": interval(time("11:05:00.000Z"), time("11:06:00.000Z")), "subgroups": [ { "subgid": null, "item_count": 0 } ] }
+{ "timebin": interval(time("11:06:00.000Z"), time("11:07:00.000Z")), "subgroups": [ { "subgid": null, "item_count": 0 } ] }
+{ "timebin": interval(time("11:07:00.000Z"), time("11:08:00.000Z")), "subgroups": [ { "subgid": null, "item_count": 0 }, { "subgid": "Email", "item_count": 2 } ] }
+{ "timebin": interval(time("11:08:00.000Z"), time("11:09:00.000Z")), "subgroups": [ { "subgid": null, "item_count": 0 } ] }
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/constructor/interval/interval.3.ast b/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/constructor/interval/interval.3.ast
index fd0e9c5..73a4ff6 100644
--- a/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/constructor/interval/interval.3.ast
+++ b/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/constructor/interval/interval.3.ast
@@ -357,4 +357,100 @@
       LiteralExpr [NULL]
     ]
   )
-]
+  (
+    LiteralExpr [STRING] [interval71]
+    :
+    FunctionCall test.interval@2[
+      FunctionCall test.date@1[
+        LiteralExpr [STRING] [2010-10-30]
+      ]
+      FunctionCall test.date@1[
+        LiteralExpr [STRING] [2012-10-21]
+      ]
+    ]
+  )
+  (
+    LiteralExpr [STRING] [interval72]
+    :
+    FunctionCall test.interval@2[
+      LiteralExpr [NULL]
+      FunctionCall test.date@1[
+        LiteralExpr [STRING] [2012-10-21]
+      ]
+    ]
+  )
+  (
+    LiteralExpr [STRING] [interval73]
+    :
+    FunctionCall test.interval@2[
+      FunctionCall test.date@1[
+        LiteralExpr [STRING] [2010-10-30]
+      ]
+      LiteralExpr [NULL]
+    ]
+  )
+  (
+    LiteralExpr [STRING] [interval74]
+    :
+    FunctionCall test.interval@2[
+      FunctionCall test.time@1[
+        LiteralExpr [STRING] [03:04:05.678-11:00]
+      ]
+      FunctionCall test.time@1[
+        LiteralExpr [STRING] [232425267+0200]
+      ]
+    ]
+  )
+  (
+    LiteralExpr [STRING] [interval75]
+    :
+    FunctionCall test.interval@2[
+      LiteralExpr [NULL]
+      FunctionCall test.time@1[
+        LiteralExpr [STRING] [232425267+0200]
+      ]
+    ]
+  )
+  (
+    LiteralExpr [STRING] [interval76]
+    :
+    FunctionCall test.interval@2[
+      FunctionCall test.time@1[
+        LiteralExpr [STRING] [03:04:05.678-11:00]
+      ]
+      LiteralExpr [NULL]
+    ]
+  )
+  (
+    LiteralExpr [STRING] [interval77]
+    :
+    FunctionCall test.interval@2[
+      FunctionCall test.datetime@1[
+        LiteralExpr [STRING] [-1987-11-19T02:43:57.938+08:00]
+      ]
+      FunctionCall test.datetime@1[
+        LiteralExpr [STRING] [19991112T124935948-0700]
+      ]
+    ]
+  )
+  (
+    LiteralExpr [STRING] [interval78]
+    :
+    FunctionCall test.interval@2[
+      LiteralExpr [NULL]
+      FunctionCall test.datetime@1[
+        LiteralExpr [STRING] [19991112T124935948-0700]
+      ]
+    ]
+  )
+  (
+    LiteralExpr [STRING] [interval79]
+    :
+    FunctionCall test.interval@2[
+      FunctionCall test.datetime@1[
+        LiteralExpr [STRING] [-1987-11-19T02:43:57.938+08:00]
+      ]
+      LiteralExpr [NULL]
+    ]
+  )
+]
\ No newline at end of file
diff --git a/asterix-doc/src/site/markdown/aql/allens.md b/asterix-doc/src/site/markdown/aql/allens.md
index 75fa218..ddf81a6 100644
--- a/asterix-doc/src/site/markdown/aql/allens.md
+++ b/asterix-doc/src/site/markdown/aql/allens.md
@@ -27,9 +27,9 @@
 
 ## <a id="AboutAllensRelations">About Allen's Relations</a> <font size="4"><a href="#toc">[Back to TOC]</a></font> ##
 
-AsterixDB supports Allen's relations over interval types. Allen's relations are also called Allen's interval algebra. There are totally 13 base relations described by this algebra, and all of them are supported in AsterixDB (note that `interval-equals` is supported by the `=` comparison symbol so there is no extra function for it). 
+AsterixDB supports Allen's relations over interval types. Allen's relations are also called Allen's interval algebra. There are totally 13 base relations described by this algebra, and all of them are supported in AsterixDB (note that `interval-equals` is supported by the `=` comparison symbol so there is no extra function for it).
 
-A detailed description of Allen's relations can be found from its [wikipedia entry](http://en.wikipedia.org/wiki/Allen's_interval_algebra). 
+A detailed description of Allen's relations can be found from its [wikipedia entry](http://en.wikipedia.org/wiki/Allen's_interval_algebra).
 
 ## <a id="AllensRelatonsFunctions">Allen's Relations Functions</a> <font size="4"><a href="#toc">[Back to TOC]</a></font> ##
 
@@ -40,19 +40,19 @@
         interval-before(interval1, interval2)
         interval-after(interval1, interval2)
 
- * These two functions check whether an interval happens before/after another interval. 
+ * These two functions check whether an interval happens before/after another interval.
  * Arguments:
     * `interval1`, `interval2`: two intervals to be compared
  * Return Value:
-   
+
     A `boolean` value. Specifically, `interval-before(interval1, interval2)` is true if and only if `interval1.end < interval2.start`, and `interval-after(interval1, interval2)` is true if and only if `interval1.start > interval2.end`. If any of the two inputs is `null`, `null` is returned.
 
  * Examples:
 
-        let $itv1 := interval-from-date("2000-01-01", "2005-01-01")
-        let $itv2 := interval-from-date("2005-05-01", "2012-09-09")
+        let $itv1 := interval(date("2000-01-01"), date("2005-01-01"))
+        let $itv2 := interval(date("2005-05-01"), date("2012-09-09"))
         return {"interval-before": interval-before($itv1, $itv2), "interval-after": interval-after($itv2, $itv1)}
-        
+
  * The expected result is:
 
         { "interval-before": true, "interval-after": true }
@@ -69,7 +69,7 @@
  * Arguments:
     * `interval1`, `interval2`: two intervals to be compared
  * Return Value:
-   
+
     A `boolean` value. Specifically, `interval-covers(interval1, interval2)` is true if and only if
 
         interval1.start <= interval2.start
@@ -84,14 +84,14 @@
 
  * Examples:
 
-        let $itv1 := interval-from-date("2000-01-01", "2005-01-01")
-        let $itv2 := interval-from-date("2000-03-01", "2004-09-09")
-        let $itv3 := interval-from-date("2006-08-01", "2007-03-01")
-        let $itv4 := interval-from-date("2004-09-10", "2012-08-01")
+        let $itv1 := interval(date("2000-01-01"), date("2005-01-01"))
+        let $itv2 := interval(date("2000-03-01"), date("2004-09-09"))
+        let $itv3 := interval(date("2006-08-01"), date("2007-03-01"))
+        let $itv4 := interval(date("2004-09-10"), date("2012-08-01"))
         return {"interval-covers": interval-covers($itv1, $itv2), "interval-covered-by": interval-covered-by($itv3, $itv4)}
-        
+
  * The expected result is:
- 
+
         { "interval-covers": true, "interval-covered-by": true }
 
 
@@ -106,7 +106,7 @@
  * Arguments:
     * `interval1`, `interval2`: two intervals to be compared
  * Return Value:
-   
+
     A `boolean` value. Specifically, `interval-overlaps(interval1, interval2)` is true if and only if
 
         interval1.start < interval2.start
@@ -125,15 +125,15 @@
 
  * Examples:
 
-        let $itv1 := interval-from-date("2000-01-01", "2005-01-01")
-        let $itv2 := interval-from-date("2004-05-01", "2012-09-09")
-        let $itv3 := interval-from-date("2006-08-01", "2007-03-01")
-        let $itv4 := interval-from-date("2004-09-10", "2006-12-31")
-        return {"overlaps": interval-overlaps($itv1, $itv2), 
+        let $itv1 := interval(date("2000-01-01"), date("2005-01-01"))
+        let $itv2 := interval(date("2004-05-01"), date("2012-09-09"))
+        let $itv3 := interval(date("2006-08-01"), date("2007-03-01"))
+        let $itv4 := interval(date("2004-09-10"), date("2006-12-31"))
+        return {"overlaps": interval-overlaps($itv1, $itv2),
                 "overlapped-by": interval-overlapped-by($itv3, $itv4)}
-        
+
  * The expected result is:
- 
+
         { "overlaps": true, "overlapped-by": true }
 
 
@@ -144,11 +144,11 @@
 
         interval-overlapping(interval1, interval2)
 
- * This functions check whether two intervals share any points with each other. 
+ * This functions check whether two intervals share any points with each other.
  * Arguments:
     * `interval1`, `interval2`: two intervals to be compared
  * Return Value:
-   
+
     A `boolean` value. Specifically, `interval-overlapping(interval1, interval2)` is true if
 
         (interval2.start >= interval1.start
@@ -161,15 +161,15 @@
 
  * Examples:
 
-        let $itv1 := interval-from-date("2000-01-01", "2005-01-01")
-        let $itv2 := interval-from-date("2004-05-01", "2012-09-09")
-        let $itv3 := interval-from-date("2006-08-01", "2007-03-01")
-        let $itv4 := interval-from-date("2004-09-10", "2006-12-31")
-        return {"overlapping1": interval-overlapping($itv1, $itv2), 
+        let $itv1 := interval(date("2000-01-01"), date("2005-01-01"))
+        let $itv2 := interval(date("2004-05-01"), date("2012-09-09"))
+        let $itv3 := interval(date("2006-08-01"), date("2007-03-01"))
+        let $itv4 := interval(date("2004-09-10"), date("2006-12-31"))
+        return {"overlapping1": interval-overlapping($itv1, $itv2),
                 "overlapping2": interval-overlapping($itv3, $itv4)}
-        
+
  * The expected result is:
- 
+
         { "overlapping1": true, "overlapping2": true }
 
 
@@ -180,23 +180,23 @@
         interval-meets(interval1, interval2)
         interval-met-by(interval1, interval2)
 
- * These two functions check whether an interval meets with another interval. 
+ * These two functions check whether an interval meets with another interval.
  * Arguments:
     * `interval1`, `interval2`: two intervals to be compared
  * Return Value:
-   
+
     A `boolean` value. Specifically, `interval-meets(interval1, interval2)` is true if and only if `interval1.end = interval2.start`, and `interval-met-by(interval1, interval2)` is true if and only if `interval1.start = interval2.end`. If any of the two inputs is `null`, `null` is returned.
 
  * Examples:
 
-        let $itv1 := interval-from-date("2000-01-01", "2005-01-01")
-        let $itv2 := interval-from-date("2005-01-01", "2012-09-09")
-        let $itv3 := interval-from-date("2006-08-01", "2007-03-01")
-        let $itv4 := interval-from-date("2004-09-10", "2006-08-01")
+        let $itv1 := interval(date("2000-01-01"), date("2005-01-01"))
+        let $itv2 := interval(date("2005-01-01"), date("2012-09-09"))
+        let $itv3 := interval(date("2006-08-01"), date("2007-03-01"))
+        let $itv4 := interval(date("2004-09-10"), date("2006-08-01"))
         return {"meets": interval-meets($itv1, $itv2), "metby": interval-met-by($itv3, $itv4)}
 
  * The expected result is:
- 
+
         { "meets": true, "metby": true }
 
 
@@ -211,7 +211,7 @@
  * Arguments:
     * `interval1`, `interval2`: two intervals to be compared
  * Return Value:
-   
+
     A `boolean` value. Specifically, `interval-starts(interval1, interval2)` returns true if and only if
 
         interval1.start = interval2.start
@@ -226,14 +226,14 @@
 
  * Examples:
 
-        let $itv1 := interval-from-date("2000-01-01", "2005-01-01")
-        let $itv2 := interval-from-date("2000-01-01", "2012-09-09")
-        let $itv3 := interval-from-date("2006-08-01", "2007-03-01")
-        let $itv4 := interval-from-date("2006-08-01", "2006-08-01")
+        let $itv1 := interval(date("2000-01-01"), date("2005-01-01"))
+        let $itv2 := interval(date("2000-01-01"), date("2012-09-09"))
+        let $itv3 := interval(date("2006-08-01"), date("2007-03-01"))
+        let $itv4 := interval(date("2006-08-01"), date("2006-08-02"))
         return {"interval-starts": interval-starts($itv1, $itv2), "interval-started-by": interval-started-by($itv3, $itv4)}
 
  * The expected result is:
- 
+
         { "interval-starts": true, "interval-started-by": true }
 
 
@@ -248,7 +248,7 @@
  * Arguments:
     * `interval1`, `interval2`: two intervals to be compared
  * Return Value:
-   
+
     A `boolean` value. Specifically, `interval-ends(interval1, interval2)` returns true if and only if
 
         interval1.end = interval2.end
@@ -263,12 +263,12 @@
 
 * Examples:
 
-        let $itv1 := interval-from-date("2000-01-01", "2005-01-01")
-        let $itv2 := interval-from-date("1998-01-01", "2005-01-01")
-        let $itv3 := interval-from-date("2006-08-01", "2007-03-01")
-        let $itv4 := interval-from-date("2006-09-10", "2007-03-01")
+        let $itv1 := interval(date("2000-01-01"), date("2005-01-01"))
+        let $itv2 := interval(date("1998-01-01"), date("2005-01-01"))
+        let $itv3 := interval(date("2006-08-01"), date("2007-03-01"))
+        let $itv4 := interval(date("2006-09-10"), date("2007-03-01"))
         return {"interval-ends": interval-ends($itv1, $itv2), "interval-ended-by": interval-ended-by($itv3, $itv4) }
-        
+
 * The expected result is:
 
         { "interval-ends": true, "interval-ended-by": true }
diff --git a/asterix-doc/src/site/markdown/aql/datamodel.md b/asterix-doc/src/site/markdown/aql/datamodel.md
index 323e913..59ef5c9 100644
--- a/asterix-doc/src/site/markdown/aql/datamodel.md
+++ b/asterix-doc/src/site/markdown/aql/datamodel.md
@@ -293,15 +293,15 @@
 
  * Example:
 
-        let $v1 := interval-from-date(date("2013-01-01"), date("20130505"))
-        let $v2 := interval-from-time(time("00:01:01"), time("213901049+0800"))
-        let $v3 := interval-from-datetime(datetime("2013-01-01T00:01:01"), datetime("20130505T213901049+0800"))
+        let $v1 := interval(date("2013-01-01"), date("20130505"))
+        let $v2 := interval(time("00:01:01"), time("213901049+0800"))
+        let $v3 := interval(datetime("2013-01-01T00:01:01"), datetime("20130505T213901049+0800"))
         return { "v1": $v1, "v2": $v2, "v3": $v3 }
 
 
  * The expected result is:
 
-        { "v1": interval-date("2013-01-01, 2013-05-05"), "v2": interval-time("00:01:01.000Z, 13:39:01.049Z"), "v3": interval-datetime("2013-01-01T00:01:01.000Z, 2013-05-05T13:39:01.049Z") }
+        { "v1": interval(date("2013-01-01"), date("2013-05-05")), "v2": interval(time("00:01:01.000Z"), time("13:39:01.049Z")), "v3": interval(datetime("2013-01-01T00:01:01.000Z"), datetime("2013-05-05T13:39:01.049Z")) }
 
 ### <a id="PrimitiveTypesUUID">UUID</a><font size="4"><a href="#toc">[Back to TOC]</a></font> ###
 `uuid` represents a UUID value, which stands for Universally unique identifier. It is defined by a canonical format using hexadecimal text with inserted hyphen characters. (E.g.: 5a28ce1e-6a74-4201-9e8f-683256e5706f). This type is generally used to store auto-generated primary key values.
diff --git a/asterix-doc/src/site/markdown/aql/functions.md b/asterix-doc/src/site/markdown/aql/functions.md
index 1907689..7f013f4 100644
--- a/asterix-doc/src/site/markdown/aql/functions.md
+++ b/asterix-doc/src/site/markdown/aql/functions.md
@@ -2040,11 +2040,11 @@
 
  * The expected result is:
 
-        { "overlap1": interval-time("12:23:39.000Z, 18:27:19.000Z"),
+        { "overlap1": interval(time("12:23:39.000Z"), time("18:27:19.000Z")),
           "overlap2": null,
           "overlap3": null,
-          "overlap4": interval-date("2013-01-01, 2014-01-01"),
-          "overlap5": interval-datetime("1989-03-04T12:23:39.000Z, 2000-10-30T18:27:19.000Z"),
+          "overlap4": interval(date("2013-01-01"), date("2014-01-01")),
+          "overlap5": interval(datetime("1989-03-04T12:23:39.000Z"), datetime("2000-10-30T18:27:19.000Z")),
           "overlap6": null }
 
 
@@ -2079,17 +2079,17 @@
         let $c3 := time("12:23:34.930+07:00")
 
         return { "bin1": interval-bin($c1, date("1990-01-01"), year-month-duration("P1Y")),
-         "bin2": interval-bin($c2, datetime("1990-01-01T00:00:00.000Z"), year-month-duration("P6M")),
-         "bin3": interval-bin($c3, time("00:00:00"), day-time-duration("PD1M")),
-         "bin4": interval-bin($c2, datetime("2013-01-01T00:00:00.000"), day-time-duration("PT24H"))
-       }
+          "bin2": interval-bin($c2, datetime("1990-01-01T00:00:00.000Z"), year-month-duration("P6M")),
+          "bin3": interval-bin($c3, time("00:00:00"), day-time-duration("PT1M")),
+          "bin4": interval-bin($c2, datetime("2013-01-01T00:00:00.000"), day-time-duration("PT24H"))
+        }
 
    * The expected result is:
 
-        { "bin1": interval-date("2010-01-01, 2011-01-01"),
-          "bin2": interval-datetime("-1987-07-01T00:00:00.000Z, -1986-01-01T00:00:00.000Z"),
-          "bin3": interval-time("05:23:00.000Z, 05:24:00.000Z"),
-          "bin4": interval-datetime("-1987-11-19T00:00:00.000Z, -1987-11-20T00:00:00.000Z")}
+        { "bin1": interval(date("2010-01-01"), date("2011-01-01")),
+          "bin2": interval(datetime("-1987-07-01T00:00:00.000Z"), datetime("-1986-01-01T00:00:00.000Z")),
+          "bin3": interval(time("05:23:00.000Z"), time("05:24:00.000Z")),
+          "bin4": interval(datetime("-1987-11-19T00:00:00.000Z"), datetime("-1987-11-20T00:00:00.000Z")) }
 
 
 ### interval-from-date ###
@@ -2111,7 +2111,7 @@
 
  * The expected result is:
 
-        { "date-interval": interval-date("2012-01-01, 2013-04-01") }
+        { "date-interval": interval(date("2012-01-01"), date("2013-04-01")) }
 
 
 ### interval-from-time ###
@@ -2133,7 +2133,7 @@
 
  * The expected result is:
 
-        { "time-interval": interval-time("12:23:34.456Z, 15:34:45.567Z") }
+        { "time-interval": interval(time("12:23:34.456Z"), time("15:34:45.567Z")) }
 
 
 ### interval-from-datetime ###
@@ -2155,7 +2155,7 @@
 
  * The expected result is:
 
-        { "datetime-interval": interval-datetime("2012-01-01T04:23:34.456Z, 2013-04-01T15:34:45.567Z") }
+        { "datetime-interval": interval(datetime("2012-01-01T04:23:34.456Z"), datetime("2013-04-01T15:34:45.567Z")) }
 
 
 ### interval-start-from-date/time/datetime ###
@@ -2179,7 +2179,9 @@
 
  * The expectecd result is:
 
-        { "interval1": interval-date("1984-01-01, 1985-01-01"), "interval2": interval-time("02:23:28.394Z, 05:47:28.394Z"), "interval3": interval-datetime("1999-09-09T09:09:09.999Z, 1999-12-09T09:09:09.999Z") }
+        { "interval1": interval(date("1984-01-01"), date("1985-01-01")),
+          "interval2": interval(time("02:23:28.394Z"), time("05:47:28.394Z")),
+          "interval3": interval(datetime("1999-09-09T09:09:09.999Z"), datetime("1999-12-09T09:09:09.999Z")) }
 
 
 ### overlap-bins ###
@@ -2214,9 +2216,16 @@
 
    * The expected result is:
 
-        { "timebins": [ interval-time("17:00:00.000Z, 17:30:00.000Z"), interval-time("17:30:00.000Z, 18:00:00.000Z"), interval-time("18:00:00.000Z, 18:30:00.000Z"), interval-time("18:30:00.000Z, 19:00:00.000Z") ],
-          "datebins": [ interval-date("1970-01-01, 1990-01-01"), interval-date("1990-01-01, 2010-01-01"), interval-date("2010-01-01, 2030-01-01") ],
-          "datetimebins": [ interval-datetime("1800-01-01T00:00:00.000Z, 1900-01-01T00:00:00.000Z"), interval-datetime("1900-01-01T00:00:00.000Z, 2000-01-01T00:00:00.000Z"), interval-datetime("2000-01-01T00:00:00.000Z, 2100-01-01T00:00:00.000Z") ] }
+        { "timebins": [ interval(time("17:00:00.000Z"), time("17:30:00.000Z")),
+              interval(time("17:30:00.000Z"), time("18:00:00.000Z")),
+              interval(time("18:00:00.000Z"), time("18:30:00.000Z")),
+              interval(time("18:30:00.000Z"), time("19:00:00.000Z")) ],
+          "datebins": [ interval(date("1970-01-01"), date("1990-01-01")),
+              interval(date("1990-01-01"), date("2010-01-01")),
+              interval(date("2010-01-01"), date("2030-01-01")) ],
+          "datetimebins": [ interval(datetime("1800-01-01T00:00:00.000Z"), datetime("1900-01-01T00:00:00.000Z")),
+              interval(datetime("1900-01-01T00:00:00.000Z"), datetime("2000-01-01T00:00:00.000Z")),
+              interval(datetime("2000-01-01T00:00:00.000Z"), datetime("2100-01-01T00:00:00.000Z")) ] }
 
 
 ## <a id="RecordFunctions">Record Functions</a> <font size="4"><a href="#toc">[Back to TOC]</a></font> ##
diff --git a/asterix-external-data/src/main/java/org/apache/asterix/external/library/java/JObjectAccessors.java b/asterix-external-data/src/main/java/org/apache/asterix/external/library/java/JObjectAccessors.java
index 1835739..fedb117 100644
--- a/asterix-external-data/src/main/java/org/apache/asterix/external/library/java/JObjectAccessors.java
+++ b/asterix-external-data/src/main/java/org/apache/asterix/external/library/java/JObjectAccessors.java
@@ -335,7 +335,7 @@
             int s = pointable.getStartOffset();
             long intervalStart = AIntervalSerializerDeserializer.getIntervalStart(b, s);
             long intervalEnd = AIntervalSerializerDeserializer.getIntervalEnd(b, s);
-            byte intervalType = AIntervalSerializerDeserializer.getIntervalTimeType(b, s);
+            byte intervalType = AIntervalSerializerDeserializer.getIntervalType(b, s);
             IJObject jObject = objectPool.allocate(BuiltinType.AINTERVAL);
             try {
                 ((JInterval) jObject).setValue(intervalStart, intervalEnd, intervalType);
diff --git a/asterix-external-data/src/main/java/org/apache/asterix/external/parser/ADMDataParser.java b/asterix-external-data/src/main/java/org/apache/asterix/external/parser/ADMDataParser.java
index 129b62f..73ddccd 100644
--- a/asterix-external-data/src/main/java/org/apache/asterix/external/parser/ADMDataParser.java
+++ b/asterix-external-data/src/main/java/org/apache/asterix/external/parser/ADMDataParser.java
@@ -41,13 +41,18 @@
 import org.apache.asterix.external.api.IStreamDataParser;
 import org.apache.asterix.external.util.ExternalDataConstants;
 import org.apache.asterix.external.util.ExternalDataUtils;
+import org.apache.asterix.formats.nontagged.AqlSerializerDeserializerProvider;
 import org.apache.asterix.om.base.ABoolean;
+import org.apache.asterix.om.base.AInterval;
+import org.apache.asterix.om.base.AMutableInterval;
 import org.apache.asterix.om.base.ANull;
+import org.apache.asterix.om.base.temporal.GregorianCalendarSystem;
 import org.apache.asterix.om.types.AOrderedListType;
 import org.apache.asterix.om.types.ARecordType;
 import org.apache.asterix.om.types.ATypeTag;
 import org.apache.asterix.om.types.AUnionType;
 import org.apache.asterix.om.types.AUnorderedListType;
+import org.apache.asterix.om.types.BuiltinType;
 import org.apache.asterix.om.types.IAType;
 import org.apache.asterix.om.types.hierachy.ATypeHierarchy;
 import org.apache.asterix.om.types.hierachy.ITypeConvertComputer;
@@ -56,6 +61,8 @@
 import org.apache.asterix.om.util.container.ListObjectPool;
 import org.apache.asterix.runtime.operators.file.adm.AdmLexer;
 import org.apache.asterix.runtime.operators.file.adm.AdmLexerException;
+import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
+import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 import org.apache.hyracks.data.std.api.IMutableValueStorage;
 import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
@@ -79,6 +86,11 @@
             new ListBuilderFactory());
     private IObjectPool<IMutableValueStorage, ATypeTag> abvsBuilderPool = new ListObjectPool<IMutableValueStorage, ATypeTag>(
             new AbvsBuilderFactory());
+
+    protected final AMutableInterval aInterval = new AMutableInterval(0L, 0L, (byte) 0);
+    @SuppressWarnings("unchecked")
+    private static final ISerializerDeserializer<AInterval> intervalSerde = AqlSerializerDeserializerProvider.INSTANCE
+            .getSerializerDeserializer(BuiltinType.AINTERVAL);
 
     private String mismatchErrorMessage = "Mismatch Type, expecting a value of type ";
     private String mismatchErrorMessage2 = " got a value of type ";
@@ -344,6 +356,16 @@
                 parseConstructor(ATypeTag.DATETIME, objectType, out);
                 break;
             }
+            case AdmLexer.TOKEN_INTERVAL_CONS: {
+                if (checkType(ATypeTag.INTERVAL, objectType)) {
+                    objectType = getComplexType(objectType, ATypeTag.INTERVAL);
+                    parseInterval(ATypeTag.INTERVAL, objectType, out);
+                } else {
+                    throw new ParseException(mismatchErrorMessage + objectType.getTypeTag());
+                }
+                break;
+            }
+                // TODO Remove after AsterixDB 0.8.8 Release
             case AdmLexer.TOKEN_INTERVAL_DATE_CONS: {
                 if (checkType(ATypeTag.INTERVAL, objectType)) {
                     if (admLexer.next() == AdmLexer.TOKEN_CONSTRUCTOR_OPEN) {
@@ -357,6 +379,7 @@
                 }
                 throw new ParseException("Wrong interval data parsing for date interval.");
             }
+                // TODO Remove after AsterixDB 0.8.8 Release
             case AdmLexer.TOKEN_INTERVAL_TIME_CONS: {
                 if (checkType(ATypeTag.INTERVAL, objectType)) {
                     if (admLexer.next() == AdmLexer.TOKEN_CONSTRUCTOR_OPEN) {
@@ -370,6 +393,7 @@
                 }
                 throw new ParseException("Wrong interval data parsing for time interval.");
             }
+                // TODO Remove after AsterixDB 0.8.8 Release
             case AdmLexer.TOKEN_INTERVAL_DATETIME_CONS: {
                 if (checkType(ATypeTag.INTERVAL, objectType)) {
                     if (admLexer.next() == AdmLexer.TOKEN_CONSTRUCTOR_OPEN) {
@@ -428,7 +452,6 @@
                 }
                 break;
             }
-
             case AdmLexer.TOKEN_START_ORDERED_LIST: {
                 if (checkType(ATypeTag.ORDEREDLIST, objectType)) {
                     objectType = getComplexType(objectType, ATypeTag.ORDEREDLIST);
@@ -718,6 +741,125 @@
         return -1;
     }
 
+    private void parseInterval(ATypeTag typeTag, IAType objectType, DataOutput out)
+            throws AdmLexerException, IOException, AsterixException {
+        long start = 0, end = 0;
+        byte tag = 0;
+        int token = admLexer.next();
+        int startToken = token;
+        if (token == AdmLexer.TOKEN_CONSTRUCTOR_OPEN) {
+            token = admLexer.next();
+            if (token == AdmLexer.TOKEN_DATE_CONS) {
+                // Interval Date
+                start = parseIntervalArgument(ATypeTag.DATE);
+                token = admLexer.next();
+                if (token == AdmLexer.TOKEN_COMMA) {
+                    token = admLexer.next();
+                    if (token == AdmLexer.TOKEN_DATE_CONS) {
+                        end = parseIntervalArgument(ATypeTag.DATE);
+                    } else {
+                        throw new ParseException("The interval start and end point types do not match: "
+                                + AdmLexer.tokenKindToString(startToken) + " != " + AdmLexer.tokenKindToString(token));
+                    }
+                } else {
+                    throw new ParseException("Missing COMMA before interval end point.");
+                }
+                tag = ATypeTag.DATE.serialize();
+            } else if (token == AdmLexer.TOKEN_TIME_CONS) {
+                // Interval Time
+                start = parseIntervalArgument(ATypeTag.TIME);
+                token = admLexer.next();
+                if (token == AdmLexer.TOKEN_COMMA) {
+                    token = admLexer.next();
+                    if (token == AdmLexer.TOKEN_TIME_CONS) {
+                        end = parseIntervalArgument(ATypeTag.TIME);
+                    } else {
+                        throw new ParseException("The interval start and end point types do not match: "
+                                + AdmLexer.tokenKindToString(startToken) + " != " + AdmLexer.tokenKindToString(token));
+                    }
+                } else {
+                    throw new ParseException("Missing COMMA before interval end point.");
+                }
+                tag = ATypeTag.TIME.serialize();
+            } else if (token == AdmLexer.TOKEN_DATETIME_CONS) {
+                // Interval Datetime
+                start = parseIntervalArgument(ATypeTag.DATETIME);
+                token = admLexer.next();
+                if (token == AdmLexer.TOKEN_COMMA) {
+                    token = admLexer.next();
+                    if (token == AdmLexer.TOKEN_DATETIME_CONS) {
+                        end = parseIntervalArgument(ATypeTag.DATETIME);
+                    } else {
+                        throw new ParseException("The interval start and end point types do not match: "
+                                + AdmLexer.tokenKindToString(startToken) + " != " + AdmLexer.tokenKindToString(token));
+                    }
+                } else {
+                    throw new ParseException("Missing COMMA before interval end point.");
+                }
+                tag = ATypeTag.DATETIME.serialize();
+            } else {
+                throw new ParseException("Unsupported interval type: " + AdmLexer.tokenKindToString(token) + ".");
+            }
+        }
+        // Closing interval.
+        token = admLexer.next();
+        if (token == AdmLexer.TOKEN_CONSTRUCTOR_CLOSE) {
+            try {
+                aInterval.setValue(start, end, tag);
+            } catch (AlgebricksException e) {
+                throw new HyracksDataException(e);
+            }
+        } else {
+            throw new ParseException("Interval was not closed.");
+        }
+        intervalSerde.serialize(aInterval, out);
+    }
+
+    private long parseIntervalArgument(ATypeTag tag) throws AdmLexerException, IOException, ParseException {
+        int token = admLexer.next();
+        if (token == AdmLexer.TOKEN_CONSTRUCTOR_OPEN) {
+            token = admLexer.next();
+            if (token == AdmLexer.TOKEN_STRING_LITERAL) {
+                long chrononTimeInMs = 0;
+                final String arg = admLexer.getLastTokenImage();
+                if (tag == ATypeTag.DATE) {
+                    try {
+                        chrononTimeInMs += (parseDatePart(arg, 0, arg.length() - 1)
+                                / GregorianCalendarSystem.CHRONON_OF_DAY);
+                    } catch (Exception e) {
+                        throw new HyracksDataException(e);
+                    }
+                } else if (tag == ATypeTag.TIME) {
+                    try {
+                        chrononTimeInMs += parseTimePart(arg, 0, arg.length() - 1);
+                    } catch (Exception e) {
+                        throw new HyracksDataException(e);
+                    }
+                } else if (tag == ATypeTag.DATETIME) {
+                    try {
+                        int timeSeperatorOffsetInDatetimeString = arg.indexOf('T');
+                        if (timeSeperatorOffsetInDatetimeString < 0) {
+                            throw new AlgebricksException(
+                                    "This can not be an instance of interval: missing T for a datetime value.");
+                        }
+                        chrononTimeInMs += parseDatePart(arg, 0, timeSeperatorOffsetInDatetimeString - 1);
+                        chrononTimeInMs += parseTimePart(arg, timeSeperatorOffsetInDatetimeString + 1,
+                                arg.length() - 1);
+                    } catch (Exception e) {
+                        throw new HyracksDataException(e);
+                    }
+                } else {
+                    throw new ParseException("Unsupported interval type: " + tag.name() + ".");
+                }
+                token = admLexer.next();
+                if (token == AdmLexer.TOKEN_CONSTRUCTOR_CLOSE) {
+                    return chrononTimeInMs;
+                }
+            }
+        }
+        throw new ParseException("Interval argument properly constructed.");
+    }
+
     private void parseOrderedList(AOrderedListType oltype, DataOutput out)
             throws IOException, AsterixException, AdmLexerException {
         ArrayBackedValueStorage itemBuffer = getTempBuffer();
diff --git a/asterix-external-data/src/main/java/org/apache/asterix/external/parser/AbstractDataParser.java b/asterix-external-data/src/main/java/org/apache/asterix/external/parser/AbstractDataParser.java
index f5f2793..4047b5a 100644
--- a/asterix-external-data/src/main/java/org/apache/asterix/external/parser/AbstractDataParser.java
+++ b/asterix-external-data/src/main/java/org/apache/asterix/external/parser/AbstractDataParser.java
@@ -492,7 +492,7 @@
         intervalSerde.serialize(aInterval, out);
     }
 
-    private long parseDatePart(String interval, int startOffset, int endOffset)
+    protected long parseDatePart(String interval, int startOffset, int endOffset)
             throws AlgebricksException, HyracksDataException {
 
         while (interval.charAt(endOffset) == '"' || interval.charAt(endOffset) == ' ') {
@@ -506,7 +506,7 @@
         return ADateParserFactory.parseDatePart(interval, startOffset, endOffset - startOffset + 1);
     }
 
-    private int parseTimePart(String interval, int startOffset, int endOffset)
+    protected int parseTimePart(String interval, int startOffset, int endOffset)
             throws AlgebricksException, HyracksDataException {
 
         while (interval.charAt(endOffset) == '"' || interval.charAt(endOffset) == ' ') {
diff --git a/asterix-external-data/src/main/resources/adm.grammar b/asterix-external-data/src/main/resources/adm.grammar
index 1910436..e5ac5b8 100644
--- a/asterix-external-data/src/main/resources/adm.grammar
+++ b/asterix-external-data/src/main/resources/adm.grammar
@@ -46,6 +46,7 @@
 RECTANGLE_CONS = string(rectangle)
 CIRCLE_CONS    = string(circle)
 TIME_CONS      = string(time)
+INTERVAL_CONS  = string(interval)
 INTERVAL_TIME_CONS      = string(interval-time)
 INTERVAL_DATE_CONS      = string(interval-date)
 INTERVAL_DATETIME_CONS  = string(interval-datetime)
diff --git a/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AIntervalAscPartialBinaryComparatorFactory.java b/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AIntervalAscPartialBinaryComparatorFactory.java
index 6efc7ff..0d99c44 100644
--- a/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AIntervalAscPartialBinaryComparatorFactory.java
+++ b/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AIntervalAscPartialBinaryComparatorFactory.java
@@ -18,7 +18,6 @@
  */
 package org.apache.asterix.dataflow.data.nontagged.comparators;
 
-import org.apache.asterix.dataflow.data.nontagged.serde.AInt64SerializerDeserializer;
 import org.apache.asterix.dataflow.data.nontagged.serde.AIntervalSerializerDeserializer;
 import org.apache.hyracks.api.dataflow.value.IBinaryComparator;
 import org.apache.hyracks.api.dataflow.value.IBinaryComparatorFactory;
@@ -45,20 +44,14 @@
                 // The ascending interval comparator sorts intervals first by start point, then by end point.
                 // If the interval have the same point values, the final comparison orders the intervals by type
                 // (datetime, date, time).
-                int c = Long.compare(
-                        AInt64SerializerDeserializer.getLong(b1,
-                                s1 + AIntervalSerializerDeserializer.getIntervalStartOffset()),
-                        AInt64SerializerDeserializer.getLong(b2,
-                                s2 + AIntervalSerializerDeserializer.getIntervalStartOffset()));
+                int c = Long.compare(AIntervalSerializerDeserializer.getIntervalStart(b1, s1),
+                        AIntervalSerializerDeserializer.getIntervalStart(b2, s2));
                 if (c == 0) {
-                    c = Long.compare(
-                            AInt64SerializerDeserializer.getLong(b1,
-                                    s1 + AIntervalSerializerDeserializer.getIntervalEndOffset()),
-                            AInt64SerializerDeserializer.getLong(b2,
-                                    s2 + AIntervalSerializerDeserializer.getIntervalEndOffset()));
+                    c = Long.compare(AIntervalSerializerDeserializer.getIntervalEnd(b1, s1),
+                            AIntervalSerializerDeserializer.getIntervalEnd(b2, s2));
                     if (c == 0) {
-                        c = Byte.compare(b1[s1 + AIntervalSerializerDeserializer.getIntervalTagOffset()], b2[s2
-                                + AIntervalSerializerDeserializer.getIntervalTagOffset()]);
+                        c = Byte.compare(AIntervalSerializerDeserializer.getIntervalType(b1, s1),
+                                AIntervalSerializerDeserializer.getIntervalType(b2, s2));
                     }
                 }
                 return c;
diff --git a/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AIntervalDescPartialBinaryComparatorFactory.java b/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AIntervalDescPartialBinaryComparatorFactory.java
index 9a09623..cd2b14d 100644
--- a/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AIntervalDescPartialBinaryComparatorFactory.java
+++ b/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AIntervalDescPartialBinaryComparatorFactory.java
@@ -18,7 +18,6 @@
  */
 package org.apache.asterix.dataflow.data.nontagged.comparators;
 
-import org.apache.asterix.dataflow.data.nontagged.serde.AInt64SerializerDeserializer;
 import org.apache.asterix.dataflow.data.nontagged.serde.AIntervalSerializerDeserializer;
 import org.apache.hyracks.api.dataflow.value.IBinaryComparator;
 import org.apache.hyracks.api.dataflow.value.IBinaryComparatorFactory;
@@ -45,20 +44,14 @@
                 // The descending interval comparator sorts intervals first by end point, then by start point.
                 // If the interval have the same point values, the final comparison orders the intervals by type
                 // (time, date, datetime).
-                int c = Long.compare(
-                        AInt64SerializerDeserializer.getLong(b1,
-                                s1 + AIntervalSerializerDeserializer.getIntervalEndOffset()),
-                        AInt64SerializerDeserializer.getLong(b2,
-                                s2 + AIntervalSerializerDeserializer.getIntervalEndOffset()));
+                int c = Long.compare(AIntervalSerializerDeserializer.getIntervalEnd(b1, s1),
+                        AIntervalSerializerDeserializer.getIntervalEnd(b2, s2));
                 if (c == 0) {
-                    c = Long.compare(
-                            AInt64SerializerDeserializer.getLong(b1,
-                                    s1 + AIntervalSerializerDeserializer.getIntervalStartOffset()),
-                            AInt64SerializerDeserializer.getLong(b2,
-                                    s2 + AIntervalSerializerDeserializer.getIntervalStartOffset()));
+                    c = Long.compare(AIntervalSerializerDeserializer.getIntervalStart(b1, s1),
+                            AIntervalSerializerDeserializer.getIntervalStart(b2, s2));
                     if (c == 0) {
-                        c = Byte.compare(b1[s1 + AIntervalSerializerDeserializer.getIntervalTagOffset()],
-                                b2[s2 + AIntervalSerializerDeserializer.getIntervalTagOffset()]);
+                        c = Byte.compare(AIntervalSerializerDeserializer.getIntervalType(b1, s1),
+                                AIntervalSerializerDeserializer.getIntervalType(b2, s2));
                     }
                 }
                 // Since the comparisons are based on ascending order, the result is reversed.
diff --git a/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/adm/AIntervalPrinter.java b/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/adm/AIntervalPrinter.java
index 99c02e8..360256f 100644
--- a/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/adm/AIntervalPrinter.java
+++ b/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/adm/AIntervalPrinter.java
@@ -20,8 +20,7 @@
 
 import java.io.PrintStream;
 
-import org.apache.asterix.dataflow.data.nontagged.printers.PrintTools;
-import org.apache.asterix.dataflow.data.nontagged.serde.AInt8SerializerDeserializer;
+import org.apache.asterix.dataflow.data.nontagged.serde.AIntervalSerializerDeserializer;
 import org.apache.asterix.om.types.ATypeTag;
 import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
 import org.apache.hyracks.algebricks.data.IPrinter;
@@ -42,29 +41,43 @@
      */
     @Override
     public void print(byte[] b, int s, int l, PrintStream ps) throws AlgebricksException {
-        ps.print("interval");
+        ps.print("interval(");
 
-        short typetag = AInt8SerializerDeserializer.getByte(b, s + 1 + 8 * 2);
+        byte typetag = AIntervalSerializerDeserializer.getIntervalType(b, s + 1);
+
+        IPrinter timeInstancePrinter;
 
         if (typetag == ATypeTag.DATE.serialize()) {
-            ps.print("-date(\"");
-            PrintTools.printDateString(b, s + 4, 4, ps);
+            timeInstancePrinter = ADatePrinter.INSTANCE;
+            ((ADatePrinter) timeInstancePrinter).print(b,
+                    AIntervalSerializerDeserializer.getIntervalStartOffset(b, s + 1) - 1,
+                    AIntervalSerializerDeserializer.getStartSize(b, s + 1), ps);
             ps.print(", ");
-            PrintTools.printDateString(b, s + 12, 4, ps);
+            ((ADatePrinter) timeInstancePrinter).print(b,
+                    AIntervalSerializerDeserializer.getIntervalEndOffset(b, s + 1) - 1,
+                    AIntervalSerializerDeserializer.getEndSize(b, s + 1), ps);
         } else if (typetag == ATypeTag.TIME.serialize()) {
-            ps.print("-time(\"");
-            PrintTools.printTimeString(b, s + 4, 4, ps);
+            timeInstancePrinter = ATimePrinter.INSTANCE;
+            ((ATimePrinter) timeInstancePrinter).print(b,
+                    AIntervalSerializerDeserializer.getIntervalStartOffset(b, s + 1) - 1,
+                    AIntervalSerializerDeserializer.getStartSize(b, s + 1), ps);
             ps.print(", ");
-            PrintTools.printTimeString(b, s + 12, 4, ps);
+            ((ATimePrinter) timeInstancePrinter).print(b,
+                    AIntervalSerializerDeserializer.getIntervalEndOffset(b, s + 1) - 1,
+                    AIntervalSerializerDeserializer.getEndSize(b, s + 1), ps);
         } else if (typetag == ATypeTag.DATETIME.serialize()) {
-            ps.print("-datetime(\"");
-            PrintTools.printDateTimeString(b, s, 8, ps);
+            timeInstancePrinter = ADateTimePrinter.INSTANCE;
+            ((ADateTimePrinter) timeInstancePrinter).print(b,
+                    AIntervalSerializerDeserializer.getIntervalStartOffset(b, s + 1) - 1,
+                    AIntervalSerializerDeserializer.getStartSize(b, s + 1), ps);
             ps.print(", ");
-            PrintTools.printDateTimeString(b, s + 8, 8, ps);
+            ((ADateTimePrinter) timeInstancePrinter).print(b,
+                    AIntervalSerializerDeserializer.getIntervalEndOffset(b, s + 1) - 1,
+                    AIntervalSerializerDeserializer.getEndSize(b, s + 1), ps);
         } else {
             throw new AlgebricksException("Unsupport internal time types in interval: " + typetag);
         }
 
-        ps.print("\")");
+        ps.print(")");
     }
 }
diff --git a/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/clean/AIntervalPrinter.java b/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/clean/AIntervalPrinter.java
index e77ef94..853eefb 100644
--- a/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/clean/AIntervalPrinter.java
+++ b/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/clean/AIntervalPrinter.java
@@ -20,7 +20,7 @@
 
 import java.io.PrintStream;
 
-import org.apache.asterix.dataflow.data.nontagged.serde.AInt8SerializerDeserializer;
+import org.apache.asterix.dataflow.data.nontagged.serde.AIntervalSerializerDeserializer;
 import org.apache.asterix.om.types.ATypeTag;
 import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
 import org.apache.hyracks.algebricks.data.IPrinter;
@@ -43,25 +43,37 @@
     public void print(byte[] b, int s, int l, PrintStream ps) throws AlgebricksException {
         ps.print("{ \"interval\": { \"start\": ");
 
-        short typetag = AInt8SerializerDeserializer.getByte(b, s + 1 + 8 * 2);
+        byte typetag = AIntervalSerializerDeserializer.getIntervalType(b, s + 1);
 
         IPrinter timeInstancePrinter;
 
         if (typetag == ATypeTag.DATE.serialize()) {
             timeInstancePrinter = ADatePrinter.INSTANCE;
-            ((ADatePrinter) timeInstancePrinter).print(b, s + 4, 4, ps);
+            ((ADatePrinter) timeInstancePrinter).print(b,
+                    AIntervalSerializerDeserializer.getIntervalStartOffset(b, s + 1) - 1,
+                    AIntervalSerializerDeserializer.getStartSize(b, s + 1), ps);
             ps.print(", \"end\": ");
-            ((ADatePrinter) timeInstancePrinter).print(b, s + 12, 4, ps);
+            ((ADatePrinter) timeInstancePrinter).print(b,
+                    AIntervalSerializerDeserializer.getIntervalEndOffset(b, s + 1) - 1,
+                    AIntervalSerializerDeserializer.getEndSize(b, s + 1), ps);
         } else if (typetag == ATypeTag.TIME.serialize()) {
             timeInstancePrinter = ATimePrinter.INSTANCE;
-            ((ATimePrinter) timeInstancePrinter).print(b, s + 4, 4, ps);
+            ((ATimePrinter) timeInstancePrinter).print(b,
+                    AIntervalSerializerDeserializer.getIntervalStartOffset(b, s + 1) - 1,
+                    AIntervalSerializerDeserializer.getStartSize(b, s + 1), ps);
             ps.print(", \"end\": ");
-            ((ATimePrinter) timeInstancePrinter).print(b, s + 12, 4, ps);
+            ((ATimePrinter) timeInstancePrinter).print(b,
+                    AIntervalSerializerDeserializer.getIntervalEndOffset(b, s + 1) - 1,
+                    AIntervalSerializerDeserializer.getEndSize(b, s + 1), ps);
         } else if (typetag == ATypeTag.DATETIME.serialize()) {
             timeInstancePrinter = ADateTimePrinter.INSTANCE;
-            ((ADateTimePrinter) timeInstancePrinter).print(b, s, 8, ps);
+            ((ADateTimePrinter) timeInstancePrinter).print(b,
+                    AIntervalSerializerDeserializer.getIntervalStartOffset(b, s + 1) - 1,
+                    AIntervalSerializerDeserializer.getStartSize(b, s + 1), ps);
             ps.print(", \"end\": ");
-            ((ADateTimePrinter) timeInstancePrinter).print(b, s + 8, 8, ps);
+            ((ADateTimePrinter) timeInstancePrinter).print(b,
+                    AIntervalSerializerDeserializer.getIntervalEndOffset(b, s + 1) - 1,
+                    AIntervalSerializerDeserializer.getEndSize(b, s + 1), ps);
         } else {
             throw new AlgebricksException("Unsupport internal time types in interval: " + typetag);
         }
diff --git a/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/lossless/AIntervalPrinter.java b/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/lossless/AIntervalPrinter.java
index 7727f92..9df0856 100644
--- a/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/lossless/AIntervalPrinter.java
+++ b/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/lossless/AIntervalPrinter.java
@@ -20,7 +20,7 @@
 
 import java.io.PrintStream;
 
-import org.apache.asterix.dataflow.data.nontagged.serde.AInt8SerializerDeserializer;
+import org.apache.asterix.dataflow.data.nontagged.serde.AIntervalSerializerDeserializer;
 import org.apache.asterix.om.types.ATypeTag;
 import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
 import org.apache.hyracks.algebricks.data.IPrinter;
@@ -43,25 +43,37 @@
     public void print(byte[] b, int s, int l, PrintStream ps) throws AlgebricksException {
         ps.print("{ \"interval\": { \"start\": ");
 
-        short typetag = AInt8SerializerDeserializer.getByte(b, s + 1 + 8 * 2);
+        byte typetag = AIntervalSerializerDeserializer.getIntervalType(b, s + 1);
 
         IPrinter timeInstancePrinter;
 
         if (typetag == ATypeTag.DATE.serialize()) {
             timeInstancePrinter = ADatePrinter.INSTANCE;
-            ((ADatePrinter) timeInstancePrinter).print(b, s + 4, 4, ps);
+            ((ADatePrinter) timeInstancePrinter).print(b,
+                    AIntervalSerializerDeserializer.getIntervalStartOffset(b, s + 1) - 1,
+                    AIntervalSerializerDeserializer.getStartSize(b, s + 1), ps);
             ps.print(", \"end\": ");
-            ((ADatePrinter) timeInstancePrinter).print(b, s + 12, 4, ps);
+            ((ADatePrinter) timeInstancePrinter).print(b,
+                    AIntervalSerializerDeserializer.getIntervalEndOffset(b, s + 1) - 1,
+                    AIntervalSerializerDeserializer.getEndSize(b, s + 1), ps);
         } else if (typetag == ATypeTag.TIME.serialize()) {
             timeInstancePrinter = ATimePrinter.INSTANCE;
-            ((ATimePrinter) timeInstancePrinter).print(b, s + 4, 4, ps);
+            ((ATimePrinter) timeInstancePrinter).print(b,
+                    AIntervalSerializerDeserializer.getIntervalStartOffset(b, s + 1) - 1,
+                    AIntervalSerializerDeserializer.getStartSize(b, s + 1), ps);
             ps.print(", \"end\": ");
-            ((ATimePrinter) timeInstancePrinter).print(b, s + 12, 4, ps);
+            ((ATimePrinter) timeInstancePrinter).print(b,
+                    AIntervalSerializerDeserializer.getIntervalEndOffset(b, s + 1) - 1,
+                    AIntervalSerializerDeserializer.getEndSize(b, s + 1), ps);
         } else if (typetag == ATypeTag.DATETIME.serialize()) {
             timeInstancePrinter = ADateTimePrinter.INSTANCE;
-            ((ADateTimePrinter) timeInstancePrinter).print(b, s, 8, ps);
+            ((ADateTimePrinter) timeInstancePrinter).print(b,
+                    AIntervalSerializerDeserializer.getIntervalStartOffset(b, s + 1) - 1,
+                    AIntervalSerializerDeserializer.getStartSize(b, s + 1), ps);
             ps.print(", \"end\": ");
-            ((ADateTimePrinter) timeInstancePrinter).print(b, s + 8, 8, ps);
+            ((ADateTimePrinter) timeInstancePrinter).print(b,
+                    AIntervalSerializerDeserializer.getIntervalEndOffset(b, s + 1) - 1,
+                    AIntervalSerializerDeserializer.getEndSize(b, s + 1), ps);
         } else {
             throw new AlgebricksException("Unsupport internal time types in interval: " + typetag);
         }
diff --git a/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AIntervalSerializerDeserializer.java b/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AIntervalSerializerDeserializer.java
index 94a8917..a5cbcda 100644
--- a/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AIntervalSerializerDeserializer.java
+++ b/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AIntervalSerializerDeserializer.java
@@ -23,16 +23,26 @@
 import java.io.IOException;
 
 import org.apache.asterix.om.base.AInterval;
+import org.apache.asterix.om.types.ATypeTag;
 import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.data.std.primitive.BytePointable;
+import org.apache.hyracks.data.std.primitive.IntegerPointable;
+import org.apache.hyracks.data.std.primitive.LongPointable;
 
+/*
+ * This class serializes and de-serializes the binary data representation of an interval.
+ *
+ * Interval {
+ *   byte type;
+ *   T start;
+ *   T end;
+ *
+ * T can be of type date, time or datetime.
+ */
 public class AIntervalSerializerDeserializer implements ISerializerDeserializer<AInterval> {
 
     private static final long serialVersionUID = 1L;
-
-    private static final int INTERVAL_START_POINT_OFFSET = 0;
-    private static final int INTERVAL_END_POINT_OFFSET = INTERVAL_START_POINT_OFFSET + Long.BYTES;
-    private static final int INTERVAL_TAG_OFFSET = INTERVAL_END_POINT_OFFSET + Long.BYTES;
 
     public static final AIntervalSerializerDeserializer INSTANCE = new AIntervalSerializerDeserializer();
 
@@ -42,7 +52,16 @@
     @Override
     public AInterval deserialize(DataInput in) throws HyracksDataException {
         try {
-            return new AInterval(in.readLong(), in.readLong(), in.readByte());
+            byte tag = in.readByte();
+            long start = 0, end = 0;
+            if (tag == ATypeTag.DATETIME.serialize()) {
+                start = in.readLong();
+                end = in.readLong();
+            } else {
+                start = in.readInt();
+                end = in.readInt();
+            }
+            return new AInterval(start, end, tag);
         } catch (IOException e) {
             throw new HyracksDataException(e);
         }
@@ -52,36 +71,75 @@
     @Override
     public void serialize(AInterval instance, DataOutput out) throws HyracksDataException {
         try {
-            out.writeLong(instance.getIntervalStart());
-            out.writeLong(instance.getIntervalEnd());
             out.writeByte(instance.getIntervalType());
+            if (instance.getIntervalType() == ATypeTag.DATETIME.serialize()) {
+                out.writeLong(instance.getIntervalStart());
+                out.writeLong(instance.getIntervalEnd());
+            } else {
+                out.writeInt((int) instance.getIntervalStart());
+                out.writeInt((int) instance.getIntervalEnd());
+            }
         } catch (IOException e) {
             throw new HyracksDataException(e);
         }
     }
 
-    public static long getIntervalStart(byte[] data, int offset) {
-        return AInt64SerializerDeserializer.getLong(data, offset + getIntervalStartOffset());
+    public static byte getIntervalType(byte[] data, int start) {
+        return BytePointable.getByte(data, getIntervalTypeOffset(data, start));
     }
 
-    public static long getIntervalEnd(byte[] data, int offset) {
-        return AInt64SerializerDeserializer.getLong(data, offset + getIntervalEndOffset());
+    public static int getIntervalTypeOffset(byte[] data, int start) {
+        return start;
     }
 
-    public static int getIntervalStartOffset() {
-        return INTERVAL_START_POINT_OFFSET;
+    public static int getTypeSize() {
+        return Byte.BYTES;
     }
 
-    public static int getIntervalEndOffset() {
-        return INTERVAL_END_POINT_OFFSET;
+    public static long getIntervalStart(byte[] data, int start) {
+        if (getIntervalType(data, start) == ATypeTag.DATETIME.serialize()) {
+            return LongPointable.getLong(data, getIntervalStartOffset(data, start));
+        } else {
+            return IntegerPointable.getInteger(data, getIntervalStartOffset(data, start));
+        }
     }
 
-    public static int getIntervalTagOffset() {
-        return INTERVAL_TAG_OFFSET;
+    public static int getIntervalStartOffset(byte[] data, int start) {
+        int offset = getIntervalTypeOffset(data, start) + getTypeSize();
+        return offset;
     }
 
-    public static byte getIntervalTimeType(byte[] data, int offset) {
-        return data[offset + 8 * 2];
+    public static int getStartSize(byte[] data, int start) {
+        if (getIntervalType(data, start) == ATypeTag.DATETIME.serialize()) {
+            return Long.BYTES;
+        } else {
+            return Integer.BYTES;
+        }
+    }
+
+    public static long getIntervalEnd(byte[] data, int start) {
+        if (getIntervalType(data, start) == ATypeTag.DATETIME.serialize()) {
+            return LongPointable.getLong(data, getIntervalEndOffset(data, start));
+        } else {
+            return IntegerPointable.getInteger(data, getIntervalEndOffset(data, start));
+        }
+    }
+
+    public static int getIntervalEndOffset(byte[] data, int start) {
+        int offset = getIntervalStartOffset(data, start) + getStartSize(data, start);
+        return offset;
+    }
+
+    public static int getEndSize(byte[] data, int start) {
+        if (getIntervalType(data, start) == ATypeTag.DATETIME.serialize()) {
+            return Long.BYTES;
+        } else {
+            return Integer.BYTES;
+        }
+    }
+
+    public static int getIntervalLength(byte[] data, int start) {
+        return getTypeSize() + getStartSize(data, start) + getEndSize(data, start);
     }
 
 }
diff --git a/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AOrderedListSerializerDeserializer.java b/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AOrderedListSerializerDeserializer.java
index 0004977..88413f0 100644
--- a/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AOrderedListSerializerDeserializer.java
+++ b/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AOrderedListSerializerDeserializer.java
@@ -69,19 +69,6 @@
         try {
             boolean fixedSize = false;
             ATypeTag typeTag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(in.readByte());
-            switch (typeTag) {
-                case STRING:
-                case BINARY:
-                case RECORD:
-                case ORDEREDLIST:
-                case UNORDEREDLIST:
-                case ANY:
-                    fixedSize = false;
-                    break;
-                default:
-                    fixedSize = true;
-                    break;
-            }
 
             IAType currentItemType = itemType;
             @SuppressWarnings("rawtypes")
@@ -91,6 +78,7 @@
                 currentDeserializer = AqlSerializerDeserializerProvider.INSTANCE
                         .getNonTaggedSerializerDeserializer(currentItemType);
             }
+            fixedSize = NonTaggedFormatUtil.isFixedSizedCollection(typeTag);
 
             List<IAObject> items = new ArrayList<IAObject>();
             in.readInt(); // list size
@@ -147,17 +135,11 @@
     public static int getItemOffset(byte[] serOrderedList, int offset, int itemIndex) throws AsterixException {
         if (serOrderedList[offset] == ATypeTag.ORDEREDLIST.serialize()) {
             ATypeTag typeTag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(serOrderedList[offset + 1]);
-            switch (typeTag) {
-                case STRING:
-                case BINARY:
-                case RECORD:
-                case ORDEREDLIST:
-                case UNORDEREDLIST:
-                case ANY:
-                    return offset + AInt32SerializerDeserializer.getInt(serOrderedList, offset + 10 + (4 * itemIndex));
-                default:
-                    int length = NonTaggedFormatUtil.getFieldValueLength(serOrderedList, offset + 1, typeTag, true);
-                    return offset + 10 + (length * itemIndex);
+            if (NonTaggedFormatUtil.isFixedSizedCollection(typeTag)) {
+                int length = NonTaggedFormatUtil.getFieldValueLength(serOrderedList, offset + 1, typeTag, true);
+                return offset + 10 + (length * itemIndex);
+            } else {
+                return offset + AInt32SerializerDeserializer.getInt(serOrderedList, offset + 10 + (4 * itemIndex));
             }
             // 10 = tag (1) + itemTag (1) + list size (4) + number of items (4)
         } else
diff --git a/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AUnorderedListSerializerDeserializer.java b/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AUnorderedListSerializerDeserializer.java
index 87e2ab7..94871a1 100644
--- a/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AUnorderedListSerializerDeserializer.java
+++ b/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AUnorderedListSerializerDeserializer.java
@@ -71,19 +71,6 @@
         try {
             boolean fixedSize = false;
             ATypeTag typeTag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(in.readByte());
-            switch (typeTag) {
-                case STRING:
-                case BINARY:
-                case RECORD:
-                case ORDEREDLIST:
-                case UNORDEREDLIST:
-                case ANY:
-                    fixedSize = false;
-                    break;
-                default:
-                    fixedSize = true;
-                    break;
-            }
 
             IAType currentItemType = itemType;
             @SuppressWarnings("rawtypes")
@@ -93,6 +80,7 @@
                 currentDeserializer = AqlSerializerDeserializerProvider.INSTANCE
                         .getNonTaggedSerializerDeserializer(currentItemType);
             }
+            fixedSize = NonTaggedFormatUtil.isFixedSizedCollection(typeTag);
 
             in.readInt(); // list size
             int numberOfitems;
@@ -149,17 +137,11 @@
     public static int getItemOffset(byte[] serOrderedList, int offset, int itemIndex) throws AsterixException {
         if (serOrderedList[offset] == ATypeTag.UNORDEREDLIST.serialize()) {
             ATypeTag typeTag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(serOrderedList[offset + 1]);
-            switch (typeTag) {
-                case STRING:
-                case BINARY:
-                case RECORD:
-                case ORDEREDLIST:
-                case UNORDEREDLIST:
-                case ANY:
-                    return offset + AInt32SerializerDeserializer.getInt(serOrderedList, offset + 10 + (4 * itemIndex));
-                default:
-                    int length = NonTaggedFormatUtil.getFieldValueLength(serOrderedList, offset + 1, typeTag, true);
-                    return offset + 10 + (length * itemIndex);
+            if (NonTaggedFormatUtil.isFixedSizedCollection(typeTag)) {
+                int length = NonTaggedFormatUtil.getFieldValueLength(serOrderedList, offset + 1, typeTag, true);
+                return offset + 10 + (length * itemIndex);
+            } else {
+                return offset + AInt32SerializerDeserializer.getInt(serOrderedList, offset + 10 + (4 * itemIndex));
             }
             // 10 = tag (1) + itemTag (1) + list size (4) + number of items (4)
         } else
diff --git a/asterix-om/src/main/java/org/apache/asterix/om/functions/AsterixBuiltinFunctions.java b/asterix-om/src/main/java/org/apache/asterix/om/functions/AsterixBuiltinFunctions.java
index 7b8a9fa..83eb4b9 100644
--- a/asterix-om/src/main/java/org/apache/asterix/om/functions/AsterixBuiltinFunctions.java
+++ b/asterix-om/src/main/java/org/apache/asterix/om/functions/AsterixBuiltinFunctions.java
@@ -508,6 +508,8 @@
     public final static FunctionIdentifier DAY_TIME_DURATION_CONSTRUCTOR = new FunctionIdentifier(
             FunctionConstants.ASTERIX_NS, "day-time-duration", 1);
 
+    public final static FunctionIdentifier INTERVAL_CONSTRUCTOR = new FunctionIdentifier(
+            FunctionConstants.ASTERIX_NS, "interval", 2);
     public final static FunctionIdentifier INTERVAL_CONSTRUCTOR_DATE = new FunctionIdentifier(
             FunctionConstants.ASTERIX_NS, "interval-from-date", 2);
     public final static FunctionIdentifier INTERVAL_CONSTRUCTOR_TIME = new FunctionIdentifier(
@@ -1026,6 +1028,7 @@
         addFunction(DURATION_FROM_INTERVAL, OptionalADayTimeDurationTypeComputer.INSTANCE, true);
 
         // interval constructors
+        addFunction(INTERVAL_CONSTRUCTOR, OptionalAIntervalTypeComputer.INSTANCE, true);
         addFunction(INTERVAL_CONSTRUCTOR_DATE, OptionalAIntervalTypeComputer.INSTANCE, true);
         addFunction(INTERVAL_CONSTRUCTOR_TIME, OptionalAIntervalTypeComputer.INSTANCE, true);
         addFunction(INTERVAL_CONSTRUCTOR_DATETIME, OptionalAIntervalTypeComputer.INSTANCE, true);
diff --git a/asterix-om/src/main/java/org/apache/asterix/om/pointables/AListVisitablePointable.java b/asterix-om/src/main/java/org/apache/asterix/om/pointables/AListVisitablePointable.java
index f5fd0c1..2f7d9af 100644
--- a/asterix-om/src/main/java/org/apache/asterix/om/pointables/AListVisitablePointable.java
+++ b/asterix-om/src/main/java/org/apache/asterix/om/pointables/AListVisitablePointable.java
@@ -67,7 +67,7 @@
 
     /**
      * private constructor, to prevent constructing it arbitrarily
-     * 
+     *
      * @param inputType
      */
     public AListVisitablePointable(AbstractCollectionType inputType) {
@@ -101,19 +101,9 @@
 
         int numberOfitems = AInt32SerializerDeserializer.getInt(b, s + 6);
         int itemOffset;
-        if (typedItemList) {
-            switch (itemTag) {
-                case STRING:
-                case BINARY:
-                case RECORD:
-                case ORDEREDLIST:
-                case UNORDEREDLIST:
-                case ANY:
-                    itemOffset = s + 10 + (numberOfitems * 4);
-                    break;
-                default:
-                    itemOffset = s + 10;
-            }
+
+        if (typedItemList && NonTaggedFormatUtil.isFixedSizedCollection(itemTag)) {
+            itemOffset = s + 10;
         } else {
             itemOffset = s + 10 + (numberOfitems * 4);
         }
diff --git a/asterix-om/src/main/java/org/apache/asterix/om/pointables/printer/json/clean/APrintVisitor.java b/asterix-om/src/main/java/org/apache/asterix/om/pointables/printer/json/clean/APrintVisitor.java
index 734319a..2f8e5f9 100644
--- a/asterix-om/src/main/java/org/apache/asterix/om/pointables/printer/json/clean/APrintVisitor.java
+++ b/asterix-om/src/main/java/org/apache/asterix/om/pointables/printer/json/clean/APrintVisitor.java
@@ -34,6 +34,7 @@
 import org.apache.asterix.dataflow.data.nontagged.printers.json.clean.AInt32Printer;
 import org.apache.asterix.dataflow.data.nontagged.printers.json.clean.AInt64Printer;
 import org.apache.asterix.dataflow.data.nontagged.printers.json.clean.AInt8Printer;
+import org.apache.asterix.dataflow.data.nontagged.printers.json.clean.AIntervalPrinter;
 import org.apache.asterix.dataflow.data.nontagged.printers.json.clean.ALinePrinter;
 import org.apache.asterix.dataflow.data.nontagged.printers.json.clean.ANullPrinter;
 import org.apache.asterix.dataflow.data.nontagged.printers.json.clean.APoint3DPrinter;
@@ -154,6 +155,10 @@
                     ADurationPrinter.INSTANCE.print(b, s, l, ps);
                     break;
                 }
+                case INTERVAL: {
+                    AIntervalPrinter.INSTANCE.print(b, s, l, ps);
+                    break;
+                }
                 case POINT: {
                     APointPrinter.INSTANCE.print(b, s, l, ps);
                     break;
diff --git a/asterix-om/src/main/java/org/apache/asterix/om/pointables/printer/json/lossless/APrintVisitor.java b/asterix-om/src/main/java/org/apache/asterix/om/pointables/printer/json/lossless/APrintVisitor.java
index d291d33..3d8958a 100644
--- a/asterix-om/src/main/java/org/apache/asterix/om/pointables/printer/json/lossless/APrintVisitor.java
+++ b/asterix-om/src/main/java/org/apache/asterix/om/pointables/printer/json/lossless/APrintVisitor.java
@@ -34,6 +34,7 @@
 import org.apache.asterix.dataflow.data.nontagged.printers.json.lossless.AInt32Printer;
 import org.apache.asterix.dataflow.data.nontagged.printers.json.lossless.AInt64Printer;
 import org.apache.asterix.dataflow.data.nontagged.printers.json.lossless.AInt8Printer;
+import org.apache.asterix.dataflow.data.nontagged.printers.json.lossless.AIntervalPrinter;
 import org.apache.asterix.dataflow.data.nontagged.printers.json.lossless.ALinePrinter;
 import org.apache.asterix.dataflow.data.nontagged.printers.json.lossless.ANullPrinter;
 import org.apache.asterix.dataflow.data.nontagged.printers.json.lossless.APoint3DPrinter;
@@ -154,6 +155,10 @@
                     ADurationPrinter.INSTANCE.print(b, s, l, ps);
                     break;
                 }
+                case INTERVAL: {
+                    AIntervalPrinter.INSTANCE.print(b, s, l, ps);
+                    break;
+                }
                 case POINT: {
                     APointPrinter.INSTANCE.print(b, s, l, ps);
                     break;
diff --git a/asterix-om/src/main/java/org/apache/asterix/om/util/NonTaggedFormatUtil.java b/asterix-om/src/main/java/org/apache/asterix/om/util/NonTaggedFormatUtil.java
index 6377bcc..173f80e 100644
--- a/asterix-om/src/main/java/org/apache/asterix/om/util/NonTaggedFormatUtil.java
+++ b/asterix-om/src/main/java/org/apache/asterix/om/util/NonTaggedFormatUtil.java
@@ -23,6 +23,7 @@
 import org.apache.asterix.common.config.DatasetConfig.IndexType;
 import org.apache.asterix.common.exceptions.AsterixException;
 import org.apache.asterix.dataflow.data.nontagged.serde.AInt16SerializerDeserializer;
+import org.apache.asterix.dataflow.data.nontagged.serde.AIntervalSerializerDeserializer;
 import org.apache.asterix.dataflow.data.nontagged.serde.AOrderedListSerializerDeserializer;
 import org.apache.asterix.dataflow.data.nontagged.serde.ARecordSerializerDeserializer;
 import org.apache.asterix.dataflow.data.nontagged.serde.AUnorderedListSerializerDeserializer;
@@ -50,6 +51,7 @@
         switch (type.getTypeTag()) {
             case STRING:
             case BINARY:
+            case INTERVAL:
             case RECORD:
             case ORDEREDLIST:
             case UNORDEREDLIST:
@@ -61,6 +63,22 @@
                     return false;
                 else
                     return isFixedSizedCollection(((AUnionType) type).getNullableType());
+            default:
+                return true;
+        }
+    }
+
+    public static final boolean isFixedSizedCollection(ATypeTag type) {
+        switch (type) {
+            case STRING:
+            case BINARY:
+            case RECORD:
+            case INTERVAL:
+                case ORDEREDLIST:
+            case UNORDEREDLIST:
+            case POLYGON:
+            case ANY:
+                return false;
             default:
                 return true;
         }
@@ -130,7 +148,10 @@
             case UUID:
                 return 16;
             case INTERVAL:
-                return 17;
+                if (tagged)
+                    return AIntervalSerializerDeserializer.getIntervalLength(serNonTaggedAObject, offset + 1);
+                else
+                    return AIntervalSerializerDeserializer.getIntervalLength(serNonTaggedAObject, offset);
             case POINT3D:
             case CIRCLE:
                 return 24;
diff --git a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalEndAccessor.java b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalEndAccessor.java
index b0fa757..30936f8 100644
--- a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalEndAccessor.java
+++ b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalEndAccessor.java
@@ -110,7 +110,7 @@
                                 nullSerde.serialize(ANull.NULL, out);
                                 return;
                             } else if (bytes[0] == SER_INTERVAL_TYPE_TAG) {
-                                byte timeType = AIntervalSerializerDeserializer.getIntervalTimeType(bytes, 1);
+                                byte timeType = AIntervalSerializerDeserializer.getIntervalType(bytes, 1);
                                 long endTime = AIntervalSerializerDeserializer.getIntervalEnd(bytes, 1);
                                 if (timeType == SER_DATE_TYPE_TAG) {
                                     aDate.setValue((int) (endTime));
diff --git a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalEndDateAccessor.java b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalEndDateAccessor.java
index c9c2312..710a388 100644
--- a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalEndDateAccessor.java
+++ b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalEndDateAccessor.java
@@ -97,7 +97,7 @@
                                 nullSerde.serialize(ANull.NULL, out);
                                 return;
                             } else if (bytes[0] == SER_INTERVAL_TYPE_TAG) {
-                                byte timeType = AIntervalSerializerDeserializer.getIntervalTimeType(bytes, 1);
+                                byte timeType = AIntervalSerializerDeserializer.getIntervalType(bytes, 1);
                                 long endTime = AIntervalSerializerDeserializer.getIntervalEnd(bytes, 1);
                                 if (timeType == SER_DATE_TYPE_TAG) {
                                     aDate.setValue((int) (endTime));
diff --git a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalEndDatetimeAccessor.java b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalEndDatetimeAccessor.java
index 222d616..3cfa715 100644
--- a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalEndDatetimeAccessor.java
+++ b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalEndDatetimeAccessor.java
@@ -96,7 +96,7 @@
                                 nullSerde.serialize(ANull.NULL, out);
                                 return;
                             } else if (bytes[0] == SER_INTERVAL_TYPE_TAG) {
-                                byte timeType = AIntervalSerializerDeserializer.getIntervalTimeType(bytes, 1);
+                                byte timeType = AIntervalSerializerDeserializer.getIntervalType(bytes, 1);
                                 long endTime = AIntervalSerializerDeserializer.getIntervalEnd(bytes, 1);
                                 if (timeType == SER_DATETIME_TYPE_TAG) {
                                     aDateTime.setValue(endTime);
diff --git a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalEndTimeAccessor.java b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalEndTimeAccessor.java
index f684a9c..b5aee7d 100644
--- a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalEndTimeAccessor.java
+++ b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalEndTimeAccessor.java
@@ -96,7 +96,7 @@
                                 nullSerde.serialize(ANull.NULL, out);
                                 return;
                             } else if (bytes[0] == SER_INTERVAL_TYPE_TAG) {
-                                byte timeType = AIntervalSerializerDeserializer.getIntervalTimeType(bytes, 1);
+                                byte timeType = AIntervalSerializerDeserializer.getIntervalType(bytes, 1);
                                 long endTime = AIntervalSerializerDeserializer.getIntervalEnd(bytes, 1);
                                 if (timeType == SER_TIME_TYPE_TAG) {
                                     aTime.setValue((int) (endTime));
diff --git a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalStartAccessor.java b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalStartAccessor.java
index 9eb6c44..d691bcb 100644
--- a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalStartAccessor.java
+++ b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalStartAccessor.java
@@ -110,7 +110,7 @@
                                 nullSerde.serialize(ANull.NULL, out);
                                 return;
                             } else if (bytes[0] == SER_INTERVAL_TYPE_TAG) {
-                                byte timeType = AIntervalSerializerDeserializer.getIntervalTimeType(bytes, 1);
+                                byte timeType = AIntervalSerializerDeserializer.getIntervalType(bytes, 1);
                                 long startTime = AIntervalSerializerDeserializer.getIntervalStart(bytes, 1);
                                 if (timeType == SER_DATE_TYPE_TAG) {
                                     aDate.setValue((int) (startTime));
diff --git a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalStartDateAccessor.java b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalStartDateAccessor.java
index 604c868..aa905aa 100644
--- a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalStartDateAccessor.java
+++ b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalStartDateAccessor.java
@@ -96,7 +96,7 @@
                                 nullSerde.serialize(ANull.NULL, out);
                                 return;
                             } else if (bytes[0] == SER_INTERVAL_TYPE_TAG) {
-                                byte timeType = AIntervalSerializerDeserializer.getIntervalTimeType(bytes, 1);
+                                byte timeType = AIntervalSerializerDeserializer.getIntervalType(bytes, 1);
                                 long startTime = AIntervalSerializerDeserializer.getIntervalStart(bytes, 1);
                                 if (timeType == SER_DATE_TYPE_TAG) {
                                     aDate.setValue((int) (startTime));
diff --git a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalStartDatetimeAccessor.java b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalStartDatetimeAccessor.java
index 0b52fbc..929bc12 100644
--- a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalStartDatetimeAccessor.java
+++ b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalStartDatetimeAccessor.java
@@ -96,7 +96,7 @@
                                 nullSerde.serialize(ANull.NULL, out);
                                 return;
                             } else if (bytes[0] == SER_INTERVAL_TYPE_TAG) {
-                                byte timeType = AIntervalSerializerDeserializer.getIntervalTimeType(bytes, 1);
+                                byte timeType = AIntervalSerializerDeserializer.getIntervalType(bytes, 1);
                                 long startTime = AIntervalSerializerDeserializer.getIntervalStart(bytes, 1);
                                 if (timeType == SER_DATETIME_TYPE_TAG) {
                                     aDateTime.setValue(startTime);
diff --git a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalStartTimeAccessor.java b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalStartTimeAccessor.java
index 6605857..39876ea 100644
--- a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalStartTimeAccessor.java
+++ b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalStartTimeAccessor.java
@@ -96,7 +96,7 @@
                                 nullSerde.serialize(ANull.NULL, out);
                                 return;
                             } else if (bytes[0] == SER_INTERVAL_TYPE_TAG) {
-                                byte timeType = AIntervalSerializerDeserializer.getIntervalTimeType(bytes, 1);
+                                byte timeType = AIntervalSerializerDeserializer.getIntervalType(bytes, 1);
                                 long startTime = AIntervalSerializerDeserializer.getIntervalStart(bytes, 1);
                                 if (timeType == SER_TIME_TYPE_TAG) {
                                     aTime.setValue((int) (startTime));
diff --git a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AIntervalConstructorDescriptor.java b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AIntervalConstructorDescriptor.java
new file mode 100644
index 0000000..ff655df
--- /dev/null
+++ b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AIntervalConstructorDescriptor.java
@@ -0,0 +1,167 @@
+/*
+ * 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.evaluators.constructors;
+
+import java.io.DataOutput;
+import java.io.IOException;
+
+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.formats.nontagged.AqlSerializerDeserializerProvider;
+import org.apache.asterix.om.base.AInterval;
+import org.apache.asterix.om.base.AMutableInterval;
+import org.apache.asterix.om.base.ANull;
+import org.apache.asterix.om.functions.AsterixBuiltinFunctions;
+import org.apache.asterix.om.functions.IFunctionDescriptor;
+import org.apache.asterix.om.functions.IFunctionDescriptorFactory;
+import org.apache.asterix.om.types.ATypeTag;
+import org.apache.asterix.om.types.BuiltinType;
+import org.apache.asterix.om.types.EnumDeserializer;
+import org.apache.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicDescriptor;
+import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
+import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
+import org.apache.hyracks.algebricks.runtime.base.ICopyEvaluator;
+import org.apache.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
+import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
+import org.apache.hyracks.data.std.api.IDataOutputProvider;
+import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
+import org.apache.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
+
+public class AIntervalConstructorDescriptor extends AbstractScalarFunctionDynamicDescriptor {
+
+    private static final long serialVersionUID = 1L;
+    public final static FunctionIdentifier FID = AsterixBuiltinFunctions.INTERVAL_CONSTRUCTOR;
+    private final static byte SER_NULL_TYPE_TAG = ATypeTag.NULL.serialize();
+    private final static byte SER_DATE_TYPE_TAG = ATypeTag.DATE.serialize();
+    private final static byte SER_TIME_TYPE_TAG = ATypeTag.TIME.serialize();
+    private final static byte SER_DATETIME_TYPE_TAG = ATypeTag.DATETIME.serialize();
+
+    public static final IFunctionDescriptorFactory FACTORY = new IFunctionDescriptorFactory() {
+        public IFunctionDescriptor createFunctionDescriptor() {
+            return new AIntervalConstructorDescriptor();
+        }
+    };
+
+    @Override
+    public ICopyEvaluatorFactory createEvaluatorFactory(final ICopyEvaluatorFactory[] args) {
+        return new ICopyEvaluatorFactory() {
+            private static final long serialVersionUID = 1L;
+
+            @Override
+            public ICopyEvaluator createEvaluator(final IDataOutputProvider output) throws AlgebricksException {
+                return new ICopyEvaluator() {
+
+                    private DataOutput out = output.getDataOutput();
+
+                    private ArrayBackedValueStorage argOut0 = new ArrayBackedValueStorage();
+                    private ArrayBackedValueStorage argOut1 = new ArrayBackedValueStorage();
+                    private ICopyEvaluator eval0 = args[0].createEvaluator(argOut0);
+                    private ICopyEvaluator eval1 = args[1].createEvaluator(argOut1);
+                    private String errorMessage = "This can not be an instance of interval (only support Date/Time/Datetime)";
+                    //TODO: Where to move and fix these?
+                    private AMutableInterval aInterval = new AMutableInterval(0L, 0L, (byte) 0);
+                    @SuppressWarnings("unchecked")
+                    private ISerializerDeserializer<AInterval> intervalSerde = AqlSerializerDeserializerProvider.INSTANCE
+                            .getSerializerDeserializer(BuiltinType.AINTERVAL);
+                    @SuppressWarnings("unchecked")
+                    private ISerializerDeserializer<ANull> nullSerde = AqlSerializerDeserializerProvider.INSTANCE
+                            .getSerializerDeserializer(BuiltinType.ANULL);
+
+                    @Override
+                    public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
+
+                        argOut0.reset();
+                        argOut1.reset();
+                        eval0.evaluate(tuple);
+                        eval1.evaluate(tuple);
+
+                        try {
+
+                            if (argOut0.getByteArray()[0] == SER_NULL_TYPE_TAG
+                                    || argOut1.getByteArray()[0] == SER_NULL_TYPE_TAG) {
+                                nullSerde.serialize(ANull.NULL, out);
+                                return;
+                            }
+
+                            if (argOut0.getByteArray()[0] != argOut1.getByteArray()[0]) {
+                                throw new AlgebricksException(
+                                        FID.getName()
+                                                + ": expects both arguments to be of the same type. Either DATE/TIME/DATETIME, but got "
+                                                + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(
+                                                        argOut0.getByteArray()[0])
+                                                + " and " + EnumDeserializer.ATYPETAGDESERIALIZER
+                                                        .deserialize(argOut0.getByteArray()[1]));
+                            }
+
+                            long intervalStart = 0, intervalEnd = 0;
+                            ATypeTag intervalType;
+
+                            if (argOut0.getByteArray()[0] == SER_DATE_TYPE_TAG) {
+                                intervalStart = ADateSerializerDeserializer.getChronon(argOut0.getByteArray(), 1);
+                                intervalType = ATypeTag.DATE;
+                            } else if (argOut0.getByteArray()[0] == SER_TIME_TYPE_TAG) {
+                                intervalStart = ATimeSerializerDeserializer.getChronon(argOut0.getByteArray(), 1);
+                                intervalType = ATypeTag.TIME;
+                            } else if (argOut0.getByteArray()[0] == SER_DATETIME_TYPE_TAG) {
+                                intervalStart = ADateTimeSerializerDeserializer.getChronon(argOut0.getByteArray(), 1);
+                                intervalType = ATypeTag.DATETIME;
+                            } else {
+                                throw new AlgebricksException(FID.getName()
+                                        + ": expects NULL/DATE/TIME/DATETIME for the first argument, but got "
+                                        + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argOut0.getByteArray()[0]));
+                            }
+
+                            if (argOut1.getByteArray()[0] == SER_DATE_TYPE_TAG) {
+                                intervalEnd = ADateSerializerDeserializer.getChronon(argOut1.getByteArray(), 1);
+                            } else if (argOut1.getByteArray()[0] == SER_TIME_TYPE_TAG) {
+                                intervalEnd = ATimeSerializerDeserializer.getChronon(argOut1.getByteArray(), 1);
+                            } else if (argOut1.getByteArray()[0] == SER_DATETIME_TYPE_TAG) {
+                                intervalEnd = ADateTimeSerializerDeserializer.getChronon(argOut1.getByteArray(), 1);
+                            } else {
+                                throw new AlgebricksException(FID.getName()
+                                        + ": expects NULL/DATE/TIME/DATETIME for the second argument, but got "
+                                        + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argOut1.getByteArray()[0]));
+                            }
+
+                            if (intervalEnd < intervalStart) {
+                                throw new AlgebricksException(
+                                        FID.getName() + ": interval end must not be less than the interval start.");
+                            }
+
+                            aInterval.setValue(intervalStart, intervalEnd, intervalType.serialize());
+                            intervalSerde.serialize(aInterval, out);
+
+                        } catch (IOException e1) {
+                            throw new AlgebricksException(errorMessage);
+                        } catch (Exception e2) {
+                            throw new AlgebricksException(e2);
+                        }
+                    }
+                };
+            }
+        };
+    }
+
+    @Override
+    public FunctionIdentifier getIdentifier() {
+        return FID;
+    }
+
+}
\ No newline at end of file
diff --git a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/AbstractIntervalLogicFuncDescriptor.java b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/AbstractIntervalLogicFuncDescriptor.java
index 4c5a748..889032f 100644
--- a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/AbstractIntervalLogicFuncDescriptor.java
+++ b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/AbstractIntervalLogicFuncDescriptor.java
@@ -97,8 +97,8 @@
                                         + ")");
                             }
 
-                            if (AIntervalSerializerDeserializer.getIntervalTimeType(argOut0.getByteArray(), 1) != AIntervalSerializerDeserializer
-                                    .getIntervalTimeType(argOut1.getByteArray(), 1)) {
+                            if (AIntervalSerializerDeserializer.getIntervalType(argOut0.getByteArray(), 1) != AIntervalSerializerDeserializer
+                                    .getIntervalType(argOut1.getByteArray(), 1)) {
                                 throw new AlgebricksException(getIdentifier().getName()
                                         + ": failed to compare intervals with different internal time type.");
                             }
diff --git a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DurationFromIntervalDescriptor.java b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DurationFromIntervalDescriptor.java
index ce00130..d292caa 100644
--- a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DurationFromIntervalDescriptor.java
+++ b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DurationFromIntervalDescriptor.java
@@ -102,7 +102,7 @@
                             long chrononStart = AIntervalSerializerDeserializer.getIntervalStart(argOut.getByteArray(),
                                     1);
                             long chrononEnd = AIntervalSerializerDeserializer.getIntervalEnd(argOut.getByteArray(), 1);
-                            byte intervalTypeTag = AIntervalSerializerDeserializer.getIntervalTimeType(
+                            byte intervalTypeTag = AIntervalSerializerDeserializer.getIntervalType(
                                     argOut.getByteArray(), 1);
 
                             if (intervalTypeTag == ATypeTag.DATE.serialize()) {
diff --git a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/GetOverlappingIntervalDescriptor.java b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/GetOverlappingIntervalDescriptor.java
index 5678e10..a0f87f3 100644
--- a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/GetOverlappingIntervalDescriptor.java
+++ b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/GetOverlappingIntervalDescriptor.java
@@ -93,9 +93,9 @@
                                 nullSerde.serialize(ANull.NULL, out);
                             } else if (argOut0.getByteArray()[0] == SER_INTERVAL_TYPE_TAG
                                     && argOut0.getByteArray()[0] == argOut1.getByteArray()[0]) {
-                                byte type0 = AIntervalSerializerDeserializer.getIntervalTimeType(
+                                byte type0 = AIntervalSerializerDeserializer.getIntervalType(
                                         argOut0.getByteArray(), 1);
-                                byte type1 = AIntervalSerializerDeserializer.getIntervalTimeType(
+                                byte type1 = AIntervalSerializerDeserializer.getIntervalType(
                                         argOut1.getByteArray(), 1);
                                 if (type0 != type1) {
                                     throw new AlgebricksException(
diff --git a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/OverlapBinsDescriptor.java b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/OverlapBinsDescriptor.java
index 2c05989..8d3a149 100644
--- a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/OverlapBinsDescriptor.java
+++ b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/OverlapBinsDescriptor.java
@@ -112,7 +112,7 @@
                         if (type0 == ATypeTag.INTERVAL) {
                             intervalStart = AIntervalSerializerDeserializer.getIntervalStart(argOut0.getByteArray(), 1);
                             intervalEnd = AIntervalSerializerDeserializer.getIntervalEnd(argOut0.getByteArray(), 1);
-                            intervalTypeTag = AIntervalSerializerDeserializer.getIntervalTimeType(
+                            intervalTypeTag = AIntervalSerializerDeserializer.getIntervalType(
                                     argOut0.getByteArray(), 1);
                         } else if (type0 == ATypeTag.NULL) {
                             try {
diff --git a/asterix-runtime/src/main/java/org/apache/asterix/runtime/formats/NonTaggedDataFormat.java b/asterix-runtime/src/main/java/org/apache/asterix/runtime/formats/NonTaggedDataFormat.java
index 715bba7..73f121b 100644
--- a/asterix-runtime/src/main/java/org/apache/asterix/runtime/formats/NonTaggedDataFormat.java
+++ b/asterix-runtime/src/main/java/org/apache/asterix/runtime/formats/NonTaggedDataFormat.java
@@ -150,6 +150,7 @@
 import org.apache.asterix.runtime.evaluators.constructors.AInt32ConstructorDescriptor;
 import org.apache.asterix.runtime.evaluators.constructors.AInt64ConstructorDescriptor;
 import org.apache.asterix.runtime.evaluators.constructors.AInt8ConstructorDescriptor;
+import org.apache.asterix.runtime.evaluators.constructors.AIntervalConstructorDescriptor;
 import org.apache.asterix.runtime.evaluators.constructors.AIntervalFromDateConstructorDescriptor;
 import org.apache.asterix.runtime.evaluators.constructors.AIntervalFromDateTimeConstructorDescriptor;
 import org.apache.asterix.runtime.evaluators.constructors.AIntervalFromTimeConstructorDescriptor;
@@ -605,6 +606,7 @@
         temp.add(DurationFromIntervalDescriptor.FACTORY);
 
         // Interval constructor
+        temp.add(AIntervalConstructorDescriptor.FACTORY);
         temp.add(AIntervalFromDateConstructorDescriptor.FACTORY);
         temp.add(AIntervalFromTimeConstructorDescriptor.FACTORY);
         temp.add(AIntervalFromDateTimeConstructorDescriptor.FACTORY);

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/602
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I009c71b7a445d141e228ba15d56d0b6cf3c8a3f5
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Preston Carman <pr...@apache.org>

Change in asterixdb[master]: ASTERIXDB-1281 - Interval format update to AQL and ADM

Posted by "Jenkins (Code Review)" <do...@asterixdb.incubator.apache.org>.
Jenkins has posted comments on this change.

Change subject: ASTERIXDB-1281 - Interval format update to AQL and ADM
......................................................................


Patch Set 1:

Build Started https://asterix-jenkins.ics.uci.edu/job/asterix-gerrit-notopic/760/

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/602
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: I009c71b7a445d141e228ba15d56d0b6cf3c8a3f5
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Preston Carman <pr...@apache.org>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-HasComments: No

Change in asterixdb[master]: ASTERIXDB-1281 - Interval format update to AQL and ADM

Posted by "Preston Carman (Code Review)" <do...@asterixdb.incubator.apache.org>.
Hello Jenkins,

I'd like you to reexamine a change.  Please visit

    https://asterix-gerrit.ics.uci.edu/602

to look at the new patch set (#7).

Change subject: ASTERIXDB-1281 - Interval format update to AQL and ADM
......................................................................

ASTERIXDB-1281 - Interval format update to AQL and ADM

The new interval format takes a more generic approach to representing intervals.
Here is an example for a date interval:

interval(date("2012-01-01”), date(”2013-04-01”))

Note that the interval type is defined by the arguments to the interval expression.
Currently only date, time, and datetime types are supported for intervals. The new
format is used for ADM and AQL.

In addition to the format change, the internal byte structure of an interval has been
updated. The format looks like the following:

byte tag, T start, T end (where T is a date, time or datetime type)

Note how the tag has been moved to the front. Also with the new sturcture, an
interval is variable length, not fixed length as before.

Change-Id: I009c71b7a445d141e228ba15d56d0b6cf3c8a3f5
---
M asterix-app/data/temporal/simpletemp_30.json
M asterix-app/data/temporal/temporalData.json
M asterix-app/src/test/resources/runtimets/queries/comparison/interval_order/interval_order.3.query.aql
M asterix-app/src/test/resources/runtimets/queries/comparison/interval_order/interval_order.4.query.aql
M asterix-app/src/test/resources/runtimets/queries/comparison/issue363_equality/issue363_equality.3.query.aql
M asterix-app/src/test/resources/runtimets/queries/comparison/issue363_inequality_interval/issue363_inequality_interval.3.query.aql
M asterix-app/src/test/resources/runtimets/queries/constructor/interval/interval.3.query.aql
M asterix-app/src/test/resources/runtimets/queries/temporal/accessors_interval/accessors_interval.3.query.aql
M asterix-app/src/test/resources/runtimets/queries/temporal/duration_functions/duration_functions.3.query.aql
M asterix-app/src/test/resources/runtimets/queries/temporal/get_overlapping_interval/get_overlapping_interval.3.query.aql
M asterix-app/src/test/resources/runtimets/queries/temporal/interval_functions/interval_functions.3.query.aql
M asterix-app/src/test/resources/runtimets/queries/temporal/overlap_bins/overlap_bins.3.query.aql
M asterix-app/src/test/resources/runtimets/queries/temporal/overlap_bins_gby_3/overlap_bins_gby_3.3.query.aql
M asterix-app/src/test/resources/runtimets/queries_sqlpp/comparison/issue363_equality/issue363_equality.3.query.sqlpp
M asterix-app/src/test/resources/runtimets/queries_sqlpp/comparison/issue363_inequality_interval/issue363_inequality_interval.3.query.sqlpp
M asterix-app/src/test/resources/runtimets/queries_sqlpp/constructor/interval/interval.3.query.sqlpp
M asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/accessors_interval/accessors_interval.3.query.sqlpp
M asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/duration_functions/duration_functions.3.query.sqlpp
M asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/get_overlapping_interval/get_overlapping_interval.3.query.sqlpp
M asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_functions/interval_functions.3.query.sqlpp
M asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/overlap_bins/overlap_bins.3.query.sqlpp
M asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/overlap_bins_gby_3/overlap_bins_gby_3.3.query.sqlpp
M asterix-app/src/test/resources/runtimets/results/comparison/interval_order/interval_order.3.adm
M asterix-app/src/test/resources/runtimets/results/comparison/interval_order/interval_order.4.adm
M asterix-app/src/test/resources/runtimets/results/constructor/interval/interval.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/get_overlapping_interval/get_overlapping_interval.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/insert_from_ext_ds/insert_from_ext_ds.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/insert_from_ext_ds_2/insert_from_ext_ds_2.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/interval_bin/interval_bin.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/interval_bin_gby_0/interval_bin_gby_0.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/interval_bin_gby_1/interval_bin_gby_1.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/overlap_bins/overlap_bins.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/overlap_bins_gby_0/overlap_bins_gby_0.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/overlap_bins_gby_1/overlap_bins_gby_1.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/overlap_bins_gby_3/overlap_bins_gby_3.1.adm
M asterix-app/src/test/resources/runtimets/results_parser_sqlpp/comparison/issue363_equality/issue363_equality.3.ast
M asterix-app/src/test/resources/runtimets/results_parser_sqlpp/comparison/issue363_inequality_interval/issue363_inequality_interval.3.ast
M asterix-app/src/test/resources/runtimets/results_parser_sqlpp/constructor/interval/interval.3.ast
M asterix-app/src/test/resources/runtimets/results_parser_sqlpp/temporal/accessors_interval/accessors_interval.3.ast
M asterix-app/src/test/resources/runtimets/results_parser_sqlpp/temporal/duration_functions/duration_functions.3.ast
M asterix-app/src/test/resources/runtimets/results_parser_sqlpp/temporal/get_overlapping_interval/get_overlapping_interval.3.ast
M asterix-app/src/test/resources/runtimets/results_parser_sqlpp/temporal/interval_functions/interval_functions.3.ast
M asterix-app/src/test/resources/runtimets/results_parser_sqlpp/temporal/overlap_bins/overlap_bins.3.ast
M asterix-app/src/test/resources/runtimets/results_parser_sqlpp/temporal/overlap_bins_gby_3/overlap_bins_gby_3.3.ast
M asterix-app/src/test/resources/runtimets/testsuite.xml
M asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
M asterix-app/src/test/resources/runtimets/testsuite_sqlpp_parser.xml
M asterix-doc/src/site/markdown/aql/allens.md
M asterix-doc/src/site/markdown/aql/datamodel.md
M asterix-doc/src/site/markdown/aql/functions.md
M asterix-external-data/src/main/java/org/apache/asterix/external/parser/ADMDataParser.java
M asterix-external-data/src/main/java/org/apache/asterix/external/parser/AbstractDataParser.java
M asterix-external-data/src/main/resources/adm.grammar
M asterix-external-data/src/test/java/org/apache/asterix/runtime/operator/file/ADMDataParserTest.java
M asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AIntervalAscPartialBinaryComparatorFactory.java
M asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AIntervalDescPartialBinaryComparatorFactory.java
M asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/adm/AIntervalPrinter.java
M asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/clean/AIntervalPrinter.java
M asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/lossless/AIntervalPrinter.java
M asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AIntervalSerializerDeserializer.java
M asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AOrderedListSerializerDeserializer.java
M asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AUnorderedListSerializerDeserializer.java
M asterix-om/src/main/java/org/apache/asterix/om/functions/AsterixBuiltinFunctions.java
M asterix-om/src/main/java/org/apache/asterix/om/pointables/AListVisitablePointable.java
M asterix-om/src/main/java/org/apache/asterix/om/pointables/printer/json/clean/APrintVisitor.java
M asterix-om/src/main/java/org/apache/asterix/om/pointables/printer/json/lossless/APrintVisitor.java
M asterix-om/src/main/java/org/apache/asterix/om/util/NonTaggedFormatUtil.java
R asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AIntervalConstructorDescriptor.java
D asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AIntervalFromDateTimeConstructorDescriptor.java
D asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AIntervalFromTimeConstructorDescriptor.java
M asterix-runtime/src/main/java/org/apache/asterix/runtime/formats/NonTaggedDataFormat.java
71 files changed, 1,038 insertions(+), 1,409 deletions(-)


  git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb refs/changes/02/602/7
-- 
To view, visit https://asterix-gerrit.ics.uci.edu/602
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: newpatchset
Gerrit-Change-Id: I009c71b7a445d141e228ba15d56d0b6cf3c8a3f5
Gerrit-PatchSet: 7
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Preston Carman <pr...@apache.org>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-Reviewer: Preston Carman <pr...@apache.org>
Gerrit-Reviewer: Till Westmann <ti...@apache.org>

Change in asterixdb[master]: ASTERIXDB-1281 - Interval format update to AQL and ADM

Posted by "Preston Carman (Code Review)" <do...@asterixdb.incubator.apache.org>.
Preston Carman has posted comments on this change.

Change subject: ASTERIXDB-1281 - Interval format update to AQL and ADM
......................................................................


Patch Set 6:

(13 comments)

https://asterix-gerrit.ics.uci.edu/#/c/602/6/asterix-app/src/test/resources/runtimets/queries/constructor/interval/interval.3.query.aql
File asterix-app/src/test/resources/runtimets/queries/constructor/interval/interval.3.query.aql:

Line 32: return {"interval71": $itv71, "interval72": $itv72, "interval73": $itv73, "interval74": $itv74, "interval75": $itv75, "interval76": $itv76, "interval77": $itv77, "interval78": $itv78, "interval79": $itv79}
> Did we lose the ability to create an interval from a start point and a dura
I guess I got a little over zealous with me clean up. Those functions functions should have been left here.


https://asterix-gerrit.ics.uci.edu/#/c/602/6/asterix-app/src/test/resources/runtimets/testsuite.xml
File asterix-app/src/test/resources/runtimets/testsuite.xml:

Line 6300:         <test-case FilePath="temporal">
> Which tests did we remove here?
I found this test was being run twice. Once for the constructor group and then again in the temporal group. I just removed it from the temporal group.


https://asterix-gerrit.ics.uci.edu/#/c/602/6/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
File asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml:

Line 6126:             </compilation-unit>
> Which tests did we remove here?
Duplicated test.


https://asterix-gerrit.ics.uci.edu/#/c/602/6/asterix-app/src/test/resources/runtimets/testsuite_sqlpp_parser.xml
File asterix-app/src/test/resources/runtimets/testsuite_sqlpp_parser.xml:

Line 6350:             </compilation-unit>
> Which tests did we remove here?
Duplicated test.


https://asterix-gerrit.ics.uci.edu/#/c/602/6/asterix-external-data/src/main/java/org/apache/asterix/external/parser/ADMDataParser.java
File asterix-external-data/src/main/java/org/apache/asterix/external/parser/ADMDataParser.java:

Line 341:                     throw new ParseException(mismatchErrorMessage + objectType.getTypeTag());
> For the other types we use the type name, not the type tag. Should we do th
Done. Also fixed a few other type messages.


Line 671:             throws IOException {
> It seems that the line break is a little early.
Done


Line 715:             throws IOException {
> It seems that the line break is a little early.
Done


Line 718:         token = admLexer.next();
> Single line would be enough :)
Done


Line 730:         return end;
> Challenge: I can write this method in 9 lines without changing semantics or
I see a way to do it, but my idea breaks from the way the rest of the class has been written. I think this is clean and similar to the rest of the methods in this file.


Line 768:         throw new ParseException("Interval argument properly constructed.");
> "not"?
Done


https://asterix-gerrit.ics.uci.edu/#/c/602/6/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/adm/AIntervalPrinter.java
File asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/adm/AIntervalPrinter.java:

Line 71:         }
> Couldn't we just do this?
Done, also used a switch statement.


https://asterix-gerrit.ics.uci.edu/#/c/602/6/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/clean/AIntervalPrinter.java
File asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/clean/AIntervalPrinter.java:

Line 74:         }
> Same as adm/AIntervalPrinter.java?
Done


https://asterix-gerrit.ics.uci.edu/#/c/602/6/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/lossless/AIntervalPrinter.java
File asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/lossless/AIntervalPrinter.java:

Line 74:         }
> Same as adm/AIntervalPrinter.java?
Done


-- 
To view, visit https://asterix-gerrit.ics.uci.edu/602
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: I009c71b7a445d141e228ba15d56d0b6cf3c8a3f5
Gerrit-PatchSet: 6
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Preston Carman <pr...@apache.org>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-Reviewer: Preston Carman <pr...@apache.org>
Gerrit-Reviewer: Till Westmann <ti...@apache.org>
Gerrit-HasComments: Yes

Change in asterixdb[master]: ASTERIXDB-1281 - Interval format update to AQL and ADM

Posted by "Jenkins (Code Review)" <do...@asterixdb.incubator.apache.org>.
Jenkins has posted comments on this change.

Change subject: ASTERIXDB-1281 - Interval format update to AQL and ADM
......................................................................


Patch Set 4: Verified+1

Build Successful 

https://asterix-jenkins.ics.uci.edu/job/asterix-gerrit-notopic/768/ : SUCCESS

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/602
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: I009c71b7a445d141e228ba15d56d0b6cf3c8a3f5
Gerrit-PatchSet: 4
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Preston Carman <pr...@apache.org>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-Reviewer: Preston Carman <pr...@apache.org>
Gerrit-Reviewer: Till Westmann <ti...@apache.org>
Gerrit-HasComments: No

Change in asterixdb[master]: ASTERIXDB-1281 - Interval format update to AQL and ADM

Posted by "Preston Carman (Code Review)" <do...@asterixdb.incubator.apache.org>.
Hello Jenkins,

I'd like you to reexamine a change.  Please visit

    https://asterix-gerrit.ics.uci.edu/602

to look at the new patch set (#6).

Change subject: ASTERIXDB-1281 - Interval format update to AQL and ADM
......................................................................

ASTERIXDB-1281 - Interval format update to AQL and ADM

The new interval format takes a more generic approach to representing intervals.
Here is an example for a date interval:

interval(date("2012-01-01”), date(”2013-04-01”))

Note that the interval type is defined by the arguments to the interval expression.
Currently only date, time, and datetime types are supported for intervals. The new
format is used for ADM and AQL.

In addition to the format change, the internal byte structure of an interval has been
updated. The format looks like the following:

byte tag, T start, T end (where T is a date, time or datetime type)

Note how the tag has been moved to the front. Also with the new sturcture, an
interval is variable length, not fixed length as before.

Change-Id: I009c71b7a445d141e228ba15d56d0b6cf3c8a3f5
---
M asterix-app/data/temporal/simpletemp_30.json
M asterix-app/data/temporal/temporalData.json
M asterix-app/src/test/resources/runtimets/queries/comparison/interval_order/interval_order.3.query.aql
M asterix-app/src/test/resources/runtimets/queries/comparison/interval_order/interval_order.4.query.aql
M asterix-app/src/test/resources/runtimets/queries/comparison/issue363_equality/issue363_equality.3.query.aql
M asterix-app/src/test/resources/runtimets/queries/comparison/issue363_inequality_interval/issue363_inequality_interval.3.query.aql
M asterix-app/src/test/resources/runtimets/queries/constructor/interval/interval.3.query.aql
M asterix-app/src/test/resources/runtimets/queries/temporal/accessors_interval/accessors_interval.3.query.aql
M asterix-app/src/test/resources/runtimets/queries/temporal/duration_functions/duration_functions.3.query.aql
M asterix-app/src/test/resources/runtimets/queries/temporal/get_overlapping_interval/get_overlapping_interval.3.query.aql
M asterix-app/src/test/resources/runtimets/queries/temporal/interval_functions/interval_functions.3.query.aql
M asterix-app/src/test/resources/runtimets/queries/temporal/overlap_bins/overlap_bins.3.query.aql
M asterix-app/src/test/resources/runtimets/queries/temporal/overlap_bins_gby_3/overlap_bins_gby_3.3.query.aql
M asterix-app/src/test/resources/runtimets/queries_sqlpp/comparison/issue363_equality/issue363_equality.3.query.sqlpp
M asterix-app/src/test/resources/runtimets/queries_sqlpp/comparison/issue363_inequality_interval/issue363_inequality_interval.3.query.sqlpp
M asterix-app/src/test/resources/runtimets/queries_sqlpp/constructor/interval/interval.3.query.sqlpp
M asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/accessors_interval/accessors_interval.3.query.sqlpp
M asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/duration_functions/duration_functions.3.query.sqlpp
M asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/get_overlapping_interval/get_overlapping_interval.3.query.sqlpp
M asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_functions/interval_functions.3.query.sqlpp
M asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/overlap_bins/overlap_bins.3.query.sqlpp
M asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/overlap_bins_gby_3/overlap_bins_gby_3.3.query.sqlpp
M asterix-app/src/test/resources/runtimets/results/comparison/interval_order/interval_order.3.adm
M asterix-app/src/test/resources/runtimets/results/comparison/interval_order/interval_order.4.adm
M asterix-app/src/test/resources/runtimets/results/constructor/interval/interval.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/get_overlapping_interval/get_overlapping_interval.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/insert_from_ext_ds/insert_from_ext_ds.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/insert_from_ext_ds_2/insert_from_ext_ds_2.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/interval_bin/interval_bin.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/interval_bin_gby_0/interval_bin_gby_0.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/interval_bin_gby_1/interval_bin_gby_1.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/overlap_bins/overlap_bins.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/overlap_bins_gby_0/overlap_bins_gby_0.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/overlap_bins_gby_1/overlap_bins_gby_1.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/overlap_bins_gby_3/overlap_bins_gby_3.1.adm
M asterix-app/src/test/resources/runtimets/results_parser_sqlpp/comparison/issue363_equality/issue363_equality.3.ast
M asterix-app/src/test/resources/runtimets/results_parser_sqlpp/comparison/issue363_inequality_interval/issue363_inequality_interval.3.ast
M asterix-app/src/test/resources/runtimets/results_parser_sqlpp/constructor/interval/interval.3.ast
M asterix-app/src/test/resources/runtimets/results_parser_sqlpp/temporal/accessors_interval/accessors_interval.3.ast
M asterix-app/src/test/resources/runtimets/results_parser_sqlpp/temporal/duration_functions/duration_functions.3.ast
M asterix-app/src/test/resources/runtimets/results_parser_sqlpp/temporal/get_overlapping_interval/get_overlapping_interval.3.ast
M asterix-app/src/test/resources/runtimets/results_parser_sqlpp/temporal/interval_functions/interval_functions.3.ast
M asterix-app/src/test/resources/runtimets/results_parser_sqlpp/temporal/overlap_bins/overlap_bins.3.ast
M asterix-app/src/test/resources/runtimets/results_parser_sqlpp/temporal/overlap_bins_gby_3/overlap_bins_gby_3.3.ast
M asterix-app/src/test/resources/runtimets/testsuite.xml
M asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
M asterix-app/src/test/resources/runtimets/testsuite_sqlpp_parser.xml
M asterix-doc/src/site/markdown/aql/allens.md
M asterix-doc/src/site/markdown/aql/datamodel.md
M asterix-doc/src/site/markdown/aql/functions.md
M asterix-external-data/src/main/java/org/apache/asterix/external/parser/ADMDataParser.java
M asterix-external-data/src/main/java/org/apache/asterix/external/parser/AbstractDataParser.java
M asterix-external-data/src/main/resources/adm.grammar
M asterix-external-data/src/test/java/org/apache/asterix/runtime/operator/file/ADMDataParserTest.java
M asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AIntervalAscPartialBinaryComparatorFactory.java
M asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AIntervalDescPartialBinaryComparatorFactory.java
M asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/adm/AIntervalPrinter.java
M asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/clean/AIntervalPrinter.java
M asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/lossless/AIntervalPrinter.java
M asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AIntervalSerializerDeserializer.java
M asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AOrderedListSerializerDeserializer.java
M asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AUnorderedListSerializerDeserializer.java
M asterix-om/src/main/java/org/apache/asterix/om/functions/AsterixBuiltinFunctions.java
M asterix-om/src/main/java/org/apache/asterix/om/pointables/AListVisitablePointable.java
M asterix-om/src/main/java/org/apache/asterix/om/pointables/printer/json/clean/APrintVisitor.java
M asterix-om/src/main/java/org/apache/asterix/om/pointables/printer/json/lossless/APrintVisitor.java
M asterix-om/src/main/java/org/apache/asterix/om/util/NonTaggedFormatUtil.java
R asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AIntervalConstructorDescriptor.java
D asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AIntervalFromDateTimeConstructorDescriptor.java
D asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AIntervalFromTimeConstructorDescriptor.java
M asterix-runtime/src/main/java/org/apache/asterix/runtime/formats/NonTaggedDataFormat.java
71 files changed, 915 insertions(+), 1,494 deletions(-)


  git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb refs/changes/02/602/6
-- 
To view, visit https://asterix-gerrit.ics.uci.edu/602
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: newpatchset
Gerrit-Change-Id: I009c71b7a445d141e228ba15d56d0b6cf3c8a3f5
Gerrit-PatchSet: 6
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Preston Carman <pr...@apache.org>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-Reviewer: Preston Carman <pr...@apache.org>
Gerrit-Reviewer: Till Westmann <ti...@apache.org>

Change in asterixdb[master]: ASTERIXDB-1281 - Interval format update to AQL and ADM

Posted by "Jenkins (Code Review)" <do...@asterixdb.incubator.apache.org>.
Jenkins has posted comments on this change.

Change subject: ASTERIXDB-1281 - Interval format update to AQL and ADM
......................................................................


Patch Set 7: Verified+1

Build Successful 

https://asterix-jenkins.ics.uci.edu/job/asterix-gerrit-notopic/780/ : SUCCESS

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/602
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: I009c71b7a445d141e228ba15d56d0b6cf3c8a3f5
Gerrit-PatchSet: 7
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Preston Carman <pr...@apache.org>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-Reviewer: Preston Carman <pr...@apache.org>
Gerrit-Reviewer: Till Westmann <ti...@apache.org>
Gerrit-HasComments: No

Change in asterixdb[master]: ASTERIXDB-1281 - Interval format update to AQL and ADM

Posted by "Preston Carman (Code Review)" <do...@asterixdb.incubator.apache.org>.
Hello Jenkins,

I'd like you to reexamine a change.  Please visit

    https://asterix-gerrit.ics.uci.edu/602

to look at the new patch set (#5).

Change subject: ASTERIXDB-1281 - Interval format update to AQL and ADM
......................................................................

ASTERIXDB-1281 - Interval format update to AQL and ADM

The new interval format takes a more generic approach to representing intervals.
Here is an example for a date interval:

interval(date("2012-01-01”), date(”2013-04-01”))

Note that the interval type is defined by the arguments to the interval expression.
Currently only date, time, and datetime types are supported for intervals. The new
format is used for ADM and AQL.

In addition to the format change, the internal byte structure of an interval has been
updated. The format looks like the following:

byte tag, T start, T end (where T is a date, time or datetime type)

Note how the tag has been moved to the front. Also with the new sturcture, an
interval is variable length, not fixed length as before.

Change-Id: I009c71b7a445d141e228ba15d56d0b6cf3c8a3f5
---
M asterix-app/data/temporal/simpletemp_30.json
M asterix-app/data/temporal/temporalData.json
M asterix-app/src/test/resources/runtimets/queries/comparison/interval_order/interval_order.3.query.aql
M asterix-app/src/test/resources/runtimets/queries/comparison/interval_order/interval_order.4.query.aql
M asterix-app/src/test/resources/runtimets/queries/comparison/issue363_equality/issue363_equality.3.query.aql
M asterix-app/src/test/resources/runtimets/queries/comparison/issue363_inequality_interval/issue363_inequality_interval.3.query.aql
M asterix-app/src/test/resources/runtimets/queries/constructor/interval/interval.3.query.aql
M asterix-app/src/test/resources/runtimets/queries/temporal/accessors_interval/accessors_interval.3.query.aql
M asterix-app/src/test/resources/runtimets/queries/temporal/duration_functions/duration_functions.3.query.aql
M asterix-app/src/test/resources/runtimets/queries/temporal/get_overlapping_interval/get_overlapping_interval.3.query.aql
M asterix-app/src/test/resources/runtimets/queries/temporal/interval_functions/interval_functions.3.query.aql
M asterix-app/src/test/resources/runtimets/queries/temporal/overlap_bins/overlap_bins.3.query.aql
M asterix-app/src/test/resources/runtimets/queries/temporal/overlap_bins_gby_3/overlap_bins_gby_3.3.query.aql
M asterix-app/src/test/resources/runtimets/queries_sqlpp/comparison/issue363_equality/issue363_equality.3.query.sqlpp
M asterix-app/src/test/resources/runtimets/queries_sqlpp/comparison/issue363_inequality_interval/issue363_inequality_interval.3.query.sqlpp
M asterix-app/src/test/resources/runtimets/queries_sqlpp/constructor/interval/interval.3.query.sqlpp
M asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/accessors_interval/accessors_interval.3.query.sqlpp
M asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/duration_functions/duration_functions.3.query.sqlpp
M asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/get_overlapping_interval/get_overlapping_interval.3.query.sqlpp
M asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_functions/interval_functions.3.query.sqlpp
M asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/overlap_bins/overlap_bins.3.query.sqlpp
M asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/overlap_bins_gby_3/overlap_bins_gby_3.3.query.sqlpp
M asterix-app/src/test/resources/runtimets/results/comparison/interval_order/interval_order.3.adm
M asterix-app/src/test/resources/runtimets/results/comparison/interval_order/interval_order.4.adm
M asterix-app/src/test/resources/runtimets/results/constructor/interval/interval.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/get_overlapping_interval/get_overlapping_interval.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/insert_from_ext_ds/insert_from_ext_ds.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/insert_from_ext_ds_2/insert_from_ext_ds_2.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/interval_bin/interval_bin.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/interval_bin_gby_0/interval_bin_gby_0.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/interval_bin_gby_1/interval_bin_gby_1.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/overlap_bins/overlap_bins.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/overlap_bins_gby_0/overlap_bins_gby_0.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/overlap_bins_gby_1/overlap_bins_gby_1.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/overlap_bins_gby_3/overlap_bins_gby_3.1.adm
M asterix-app/src/test/resources/runtimets/results_parser_sqlpp/comparison/issue363_equality/issue363_equality.3.ast
M asterix-app/src/test/resources/runtimets/results_parser_sqlpp/comparison/issue363_inequality_interval/issue363_inequality_interval.3.ast
M asterix-app/src/test/resources/runtimets/results_parser_sqlpp/constructor/interval/interval.3.ast
M asterix-app/src/test/resources/runtimets/results_parser_sqlpp/temporal/accessors_interval/accessors_interval.3.ast
M asterix-app/src/test/resources/runtimets/results_parser_sqlpp/temporal/duration_functions/duration_functions.3.ast
M asterix-app/src/test/resources/runtimets/results_parser_sqlpp/temporal/get_overlapping_interval/get_overlapping_interval.3.ast
M asterix-app/src/test/resources/runtimets/results_parser_sqlpp/temporal/interval_functions/interval_functions.3.ast
M asterix-app/src/test/resources/runtimets/results_parser_sqlpp/temporal/overlap_bins/overlap_bins.3.ast
M asterix-app/src/test/resources/runtimets/results_parser_sqlpp/temporal/overlap_bins_gby_3/overlap_bins_gby_3.3.ast
M asterix-app/src/test/resources/runtimets/testsuite.xml
M asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
M asterix-app/src/test/resources/runtimets/testsuite_sqlpp_parser.xml
M asterix-doc/src/site/markdown/aql/allens.md
M asterix-doc/src/site/markdown/aql/datamodel.md
M asterix-doc/src/site/markdown/aql/functions.md
M asterix-external-data/src/main/java/org/apache/asterix/external/parser/ADMDataParser.java
M asterix-external-data/src/main/java/org/apache/asterix/external/parser/AbstractDataParser.java
M asterix-external-data/src/main/resources/adm.grammar
M asterix-external-data/src/test/java/org/apache/asterix/runtime/operator/file/ADMDataParserTest.java
M asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AIntervalAscPartialBinaryComparatorFactory.java
M asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AIntervalDescPartialBinaryComparatorFactory.java
M asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/adm/AIntervalPrinter.java
M asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/clean/AIntervalPrinter.java
M asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/lossless/AIntervalPrinter.java
M asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AIntervalSerializerDeserializer.java
M asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AOrderedListSerializerDeserializer.java
M asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AUnorderedListSerializerDeserializer.java
M asterix-om/src/main/java/org/apache/asterix/om/functions/AsterixBuiltinFunctions.java
M asterix-om/src/main/java/org/apache/asterix/om/pointables/AListVisitablePointable.java
M asterix-om/src/main/java/org/apache/asterix/om/pointables/printer/json/clean/APrintVisitor.java
M asterix-om/src/main/java/org/apache/asterix/om/pointables/printer/json/lossless/APrintVisitor.java
M asterix-om/src/main/java/org/apache/asterix/om/util/NonTaggedFormatUtil.java
R asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AIntervalConstructorDescriptor.java
D asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AIntervalFromDateTimeConstructorDescriptor.java
D asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AIntervalFromTimeConstructorDescriptor.java
M asterix-runtime/src/main/java/org/apache/asterix/runtime/formats/NonTaggedDataFormat.java
71 files changed, 915 insertions(+), 1,530 deletions(-)


  git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb refs/changes/02/602/5
-- 
To view, visit https://asterix-gerrit.ics.uci.edu/602
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: newpatchset
Gerrit-Change-Id: I009c71b7a445d141e228ba15d56d0b6cf3c8a3f5
Gerrit-PatchSet: 5
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Preston Carman <pr...@apache.org>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-Reviewer: Preston Carman <pr...@apache.org>
Gerrit-Reviewer: Till Westmann <ti...@apache.org>

Change in asterixdb[master]: ASTERIXDB-1281 - Interval format update to AQL and ADM

Posted by "Preston Carman (Code Review)" <do...@asterixdb.incubator.apache.org>.
Preston Carman has posted comments on this change.

Change subject: ASTERIXDB-1281 - Interval format update to AQL and ADM
......................................................................


Patch Set 2:

(11 comments)

Follow up comment and a new patch.

https://asterix-gerrit.ics.uci.edu/#/c/602/2/asterix-external-data/src/main/java/org/apache/asterix/external/parser/ADMDataParser.java
File asterix-external-data/src/main/java/org/apache/asterix/external/parser/ADMDataParser.java:

Line 705:         if (token == AdmLexer.TOKEN_CONSTRUCTOR_OPEN) {
> Could we replace these ifs with a switch?
Take a look at the new version and see if you think we need more changes.


Line 711:                 if (token == AdmLexer.TOKEN_COMMA) {
> I think that this if-statement should be replaceable with a small method th
I created a second argument parser.


Line 717:                                 + AdmLexer.tokenKindToString(startToken) + " != " + AdmLexer.tokenKindToString(token));
> It seems that startToken is an "(", if we are here. That's probably not int
Good catch. startToken is supposed to be the first argument type.


Line 780:                 if (tag == ATypeTag.DATE) {
> Can we replace this with a switch?
Done


Line 782:                         chrononTimeInMs += (parseDatePart(arg, 0, arg.length() - 1)
> This code exists somewhere else as well, right? Can we reuse that?
I am reusing the date parsing logic, but the divide statement is propagated only for interval date.


Line 784:                     } catch (Exception e) {
> Can we move the exception handling code outside the switch (if we need it)?
I was able to remove exception after looking at the function throwing this error.


Line 785:                         throw new HyracksDataException(e);
> Why would we throw a HyracksDataException here? Shouldn't this be a ParseEx
Done


Line 797:                             throw new AlgebricksException(
> Why is this an AlgebricksException? This is happening at runtime, right?
Done


https://asterix-gerrit.ics.uci.edu/#/c/602/2/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AOrderedListSerializerDeserializer.java
File asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AOrderedListSerializerDeserializer.java:

Line 81:             fixedSize = NonTaggedFormatUtil.isFixedSizedCollection(typeTag);
> Yes!
Done


https://asterix-gerrit.ics.uci.edu/#/c/602/2/asterix-om/src/main/java/org/apache/asterix/om/util/NonTaggedFormatUtil.java
File asterix-om/src/main/java/org/apache/asterix/om/util/NonTaggedFormatUtil.java:

Line 71:     public static final boolean isFixedSizedCollection(ATypeTag type) {
> Why do we have a different result here than for the other method of the sam
The arguments are slightly different. IAType has additional methods while the tag is only available for specific cases. I updated the functions to share more of the switch statement.


https://asterix-gerrit.ics.uci.edu/#/c/602/2/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AIntervalConstructorDescriptor.java
File asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AIntervalConstructorDescriptor.java:

Line 116:                             if (argOut0.getByteArray()[0] == SER_DATE_TYPE_TAG) {
> Could this be a switch?
Seems like it could be. I get the following error message "case expressions must be constant expressions". Do you know a way to define the SER_DATE_TYPE_TAG to make a constant expression at compile time?


-- 
To view, visit https://asterix-gerrit.ics.uci.edu/602
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: I009c71b7a445d141e228ba15d56d0b6cf3c8a3f5
Gerrit-PatchSet: 2
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Preston Carman <pr...@apache.org>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-Reviewer: Preston Carman <pr...@apache.org>
Gerrit-Reviewer: Till Westmann <ti...@apache.org>
Gerrit-HasComments: Yes

Change in asterixdb[master]: ASTERIXDB-1281 - Interval format update to AQL and ADM

Posted by "Jenkins (Code Review)" <do...@asterixdb.incubator.apache.org>.
Jenkins has posted comments on this change.

Change subject: ASTERIXDB-1281 - Interval format update to AQL and ADM
......................................................................


Patch Set 6: Verified+1

Build Successful 

https://asterix-jenkins.ics.uci.edu/job/asterix-gerrit-notopic/777/ : SUCCESS

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/602
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: I009c71b7a445d141e228ba15d56d0b6cf3c8a3f5
Gerrit-PatchSet: 6
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Preston Carman <pr...@apache.org>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-Reviewer: Preston Carman <pr...@apache.org>
Gerrit-Reviewer: Till Westmann <ti...@apache.org>
Gerrit-HasComments: No

Change in asterixdb[master]: ASTERIXDB-1281 - Interval format update to AQL and ADM

Posted by "Preston Carman (Code Review)" <do...@asterixdb.incubator.apache.org>.
Preston Carman has posted comments on this change.

Change subject: ASTERIXDB-1281 - Interval format update to AQL and ADM
......................................................................


Patch Set 1:

(4 comments)

Responses to your first look.

https://asterix-gerrit.ics.uci.edu/#/c/602/1/asterix-external-data/src/main/resources/adm.grammar
File asterix-external-data/src/main/resources/adm.grammar:

Line 52: INTERVAL_DATETIME_CONS  = string(interval-datetime)
> Can't we remove the last 3 ones now?
Yes, I will upload a new patch. I was not sure if we wanted to be backwards compatible.


https://asterix-gerrit.ics.uci.edu/#/c/602/1/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/adm/AIntervalPrinter.java
File asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/adm/AIntervalPrinter.java:

Line 54:                     AIntervalSerializerDeserializer.getStartSize(b, s + 1), ps);
> It is feasible to pull these out into constants?
These should definitely come from the AIntervalSerializerDeserializer (or other definitive source). The issues is now with the new interval format, an interval is variable length. A date and time interval only uses 9 (1,4,4) bytes where a datetime interval uses 17 (1,8,8) bytes. Previously we had used a long to save the date and time attribute to keep as a fixed length field.

So I am not sure if we can remove these due to the dynamic size of the data.


https://asterix-gerrit.ics.uci.edu/#/c/602/1/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/clean/AIntervalPrinter.java
File asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/clean/AIntervalPrinter.java:

Line 54:                     AIntervalSerializerDeserializer.getStartSize(b, s + 1), ps);
> It is feasible to pull these out into constants?
see previous comment


https://asterix-gerrit.ics.uci.edu/#/c/602/1/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/lossless/AIntervalPrinter.java
File asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/lossless/AIntervalPrinter.java:

Line 54:                     AIntervalSerializerDeserializer.getStartSize(b, s + 1), ps);
> It is feasible to pull these out into constants?
see previous comment


-- 
To view, visit https://asterix-gerrit.ics.uci.edu/602
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: I009c71b7a445d141e228ba15d56d0b6cf3c8a3f5
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Preston Carman <pr...@apache.org>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-Reviewer: Preston Carman <pr...@apache.org>
Gerrit-Reviewer: Till Westmann <ti...@apache.org>
Gerrit-HasComments: Yes

Change in asterixdb[master]: ASTERIXDB-1281 - Interval format update to AQL and ADM

Posted by "Till Westmann (Code Review)" <do...@asterixdb.incubator.apache.org>.
Till Westmann has posted comments on this change.

Change subject: ASTERIXDB-1281 - Interval format update to AQL and ADM
......................................................................


Patch Set 7: Code-Review+2

Cleaner and 371 lines removed - looks good to me.

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/602
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: I009c71b7a445d141e228ba15d56d0b6cf3c8a3f5
Gerrit-PatchSet: 7
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Preston Carman <pr...@apache.org>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-Reviewer: Preston Carman <pr...@apache.org>
Gerrit-Reviewer: Till Westmann <ti...@apache.org>
Gerrit-HasComments: No

Change in asterixdb[master]: ASTERIXDB-1281 - Interval format update to AQL and ADM

Posted by "Jenkins (Code Review)" <do...@asterixdb.incubator.apache.org>.
Jenkins has posted comments on this change.

Change subject: ASTERIXDB-1281 - Interval format update to AQL and ADM
......................................................................


Patch Set 5:

Build Started https://asterix-jenkins.ics.uci.edu/job/asterix-gerrit-notopic/771/

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/602
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: I009c71b7a445d141e228ba15d56d0b6cf3c8a3f5
Gerrit-PatchSet: 5
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Preston Carman <pr...@apache.org>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-Reviewer: Preston Carman <pr...@apache.org>
Gerrit-Reviewer: Till Westmann <ti...@apache.org>
Gerrit-HasComments: No

Change in asterixdb[master]: ASTERIXDB-1281 - Interval format update to AQL and ADM

Posted by "Till Westmann (Code Review)" <do...@asterixdb.incubator.apache.org>.
Till Westmann has posted comments on this change.

Change subject: ASTERIXDB-1281 - Interval format update to AQL and ADM
......................................................................


Patch Set 2:

There are a few test failures - I've also seen at least one of those on my box.

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/602
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: I009c71b7a445d141e228ba15d56d0b6cf3c8a3f5
Gerrit-PatchSet: 2
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Preston Carman <pr...@apache.org>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-Reviewer: Preston Carman <pr...@apache.org>
Gerrit-Reviewer: Till Westmann <ti...@apache.org>
Gerrit-HasComments: No

Change in asterixdb[master]: ASTERIXDB-1281 - Interval format update to AQL and ADM

Posted by "Jenkins (Code Review)" <do...@asterixdb.incubator.apache.org>.
Jenkins has posted comments on this change.

Change subject: ASTERIXDB-1281 - Interval format update to AQL and ADM
......................................................................


Patch Set 3: Verified+1

Build Successful 

https://asterix-jenkins.ics.uci.edu/job/asterix-gerrit-notopic/762/ : SUCCESS

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/602
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: I009c71b7a445d141e228ba15d56d0b6cf3c8a3f5
Gerrit-PatchSet: 3
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Preston Carman <pr...@apache.org>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-Reviewer: Preston Carman <pr...@apache.org>
Gerrit-Reviewer: Till Westmann <ti...@apache.org>
Gerrit-HasComments: No

Change in asterixdb[master]: ASTERIXDB-1281 - Interval format update to AQL and ADM

Posted by "Jenkins (Code Review)" <do...@asterixdb.incubator.apache.org>.
Jenkins has posted comments on this change.

Change subject: ASTERIXDB-1281 - Interval format update to AQL and ADM
......................................................................


Patch Set 3:

Build Started https://asterix-jenkins.ics.uci.edu/job/asterix-gerrit-notopic/762/

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/602
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: I009c71b7a445d141e228ba15d56d0b6cf3c8a3f5
Gerrit-PatchSet: 3
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Preston Carman <pr...@apache.org>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-Reviewer: Preston Carman <pr...@apache.org>
Gerrit-Reviewer: Till Westmann <ti...@apache.org>
Gerrit-HasComments: No

Change in asterixdb[master]: ASTERIXDB-1281 - Interval format update to AQL and ADM

Posted by "Preston Carman (Code Review)" <do...@asterixdb.incubator.apache.org>.
Hello Jenkins,

I'd like you to reexamine a change.  Please visit

    https://asterix-gerrit.ics.uci.edu/602

to look at the new patch set (#3).

Change subject: ASTERIXDB-1281 - Interval format update to AQL and ADM
......................................................................

ASTERIXDB-1281 - Interval format update to AQL and ADM

The new interval format takes a more generic approach to representing intervals.
Here is an example for a date interval:

interval(date("2012-01-01”), date(”2013-04-01”))

Note that the interval type is defined by the arguments to the interval expression.
Currently only date, time, and datetime types are supported for intervals. The new
format is used for ADM and AQL.

In addition to the format change, the internal byte structure of an interval has been
updated. The format looks like the following:

byte tag, T start, T end (where T is a date, time or datetime type)

Note how the tag has been moved to the front. Also with the new sturcture, an
interval is variable length, not fixed length as before.

Change-Id: I009c71b7a445d141e228ba15d56d0b6cf3c8a3f5
---
M asterix-app/data/temporal/simpletemp_30.json
M asterix-app/data/temporal/temporalData.json
M asterix-app/src/test/resources/runtimets/queries/constructor/interval/interval.3.query.aql
M asterix-app/src/test/resources/runtimets/queries_sqlpp/constructor/interval/interval.3.query.sqlpp
M asterix-app/src/test/resources/runtimets/results/comparison/interval_order/interval_order.3.adm
M asterix-app/src/test/resources/runtimets/results/comparison/interval_order/interval_order.4.adm
M asterix-app/src/test/resources/runtimets/results/constructor/interval/interval.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/get_overlapping_interval/get_overlapping_interval.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/insert_from_ext_ds/insert_from_ext_ds.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/insert_from_ext_ds_2/insert_from_ext_ds_2.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/interval_bin/interval_bin.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/interval_bin_gby_0/interval_bin_gby_0.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/interval_bin_gby_1/interval_bin_gby_1.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/overlap_bins/overlap_bins.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/overlap_bins_gby_0/overlap_bins_gby_0.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/overlap_bins_gby_1/overlap_bins_gby_1.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/overlap_bins_gby_3/overlap_bins_gby_3.1.adm
M asterix-app/src/test/resources/runtimets/results_parser_sqlpp/constructor/interval/interval.3.ast
M asterix-doc/src/site/markdown/aql/allens.md
M asterix-doc/src/site/markdown/aql/datamodel.md
M asterix-doc/src/site/markdown/aql/functions.md
M asterix-external-data/src/main/java/org/apache/asterix/external/library/java/JObjectAccessors.java
M asterix-external-data/src/main/java/org/apache/asterix/external/parser/ADMDataParser.java
M asterix-external-data/src/main/java/org/apache/asterix/external/parser/AbstractDataParser.java
M asterix-external-data/src/main/resources/adm.grammar
M asterix-external-data/src/test/java/org/apache/asterix/runtime/operator/file/ADMDataParserTest.java
M asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AIntervalAscPartialBinaryComparatorFactory.java
M asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AIntervalDescPartialBinaryComparatorFactory.java
M asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/adm/AIntervalPrinter.java
M asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/clean/AIntervalPrinter.java
M asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/lossless/AIntervalPrinter.java
M asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AIntervalSerializerDeserializer.java
M asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AOrderedListSerializerDeserializer.java
M asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AUnorderedListSerializerDeserializer.java
M asterix-om/src/main/java/org/apache/asterix/om/functions/AsterixBuiltinFunctions.java
M asterix-om/src/main/java/org/apache/asterix/om/pointables/AListVisitablePointable.java
M asterix-om/src/main/java/org/apache/asterix/om/pointables/printer/json/clean/APrintVisitor.java
M asterix-om/src/main/java/org/apache/asterix/om/pointables/printer/json/lossless/APrintVisitor.java
M asterix-om/src/main/java/org/apache/asterix/om/util/NonTaggedFormatUtil.java
M asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalEndAccessor.java
M asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalEndDateAccessor.java
M asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalEndDatetimeAccessor.java
M asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalEndTimeAccessor.java
M asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalStartAccessor.java
M asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalStartDateAccessor.java
M asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalStartDatetimeAccessor.java
M asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalStartTimeAccessor.java
A asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AIntervalConstructorDescriptor.java
M asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/AbstractIntervalLogicFuncDescriptor.java
M asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DurationFromIntervalDescriptor.java
M asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/GetOverlappingIntervalDescriptor.java
M asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/OverlapBinsDescriptor.java
M asterix-runtime/src/main/java/org/apache/asterix/runtime/formats/NonTaggedDataFormat.java
53 files changed, 839 insertions(+), 576 deletions(-)


  git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb refs/changes/02/602/3
-- 
To view, visit https://asterix-gerrit.ics.uci.edu/602
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: newpatchset
Gerrit-Change-Id: I009c71b7a445d141e228ba15d56d0b6cf3c8a3f5
Gerrit-PatchSet: 3
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Preston Carman <pr...@apache.org>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-Reviewer: Preston Carman <pr...@apache.org>
Gerrit-Reviewer: Till Westmann <ti...@apache.org>

Change in asterixdb[master]: ASTERIXDB-1281 - Interval format update to AQL and ADM

Posted by "Preston Carman (Code Review)" <do...@asterixdb.incubator.apache.org>.
Preston Carman has submitted this change and it was merged.

Change subject: ASTERIXDB-1281 - Interval format update to AQL and ADM
......................................................................


ASTERIXDB-1281 - Interval format update to AQL and ADM

The new interval format takes a more generic approach to representing intervals.
Here is an example for a date interval:

interval(date("2012-01-01”), date(”2013-04-01”))

Note that the interval type is defined by the arguments to the interval expression.
Currently only date, time, and datetime types are supported for intervals. The new
format is used for ADM and AQL.

In addition to the format change, the internal byte structure of an interval has been
updated. The format looks like the following:

byte tag, T start, T end (where T is a date, time or datetime type)

Note how the tag has been moved to the front. Also with the new sturcture, an
interval is variable length, not fixed length as before.

Change-Id: I009c71b7a445d141e228ba15d56d0b6cf3c8a3f5
Reviewed-on: https://asterix-gerrit.ics.uci.edu/602
Tested-by: Jenkins <je...@fulliautomatix.ics.uci.edu>
Reviewed-by: Till Westmann <ti...@apache.org>
---
M asterix-app/data/temporal/simpletemp_30.json
M asterix-app/data/temporal/temporalData.json
M asterix-app/src/test/resources/runtimets/queries/comparison/interval_order/interval_order.3.query.aql
M asterix-app/src/test/resources/runtimets/queries/comparison/interval_order/interval_order.4.query.aql
M asterix-app/src/test/resources/runtimets/queries/comparison/issue363_equality/issue363_equality.3.query.aql
M asterix-app/src/test/resources/runtimets/queries/comparison/issue363_inequality_interval/issue363_inequality_interval.3.query.aql
M asterix-app/src/test/resources/runtimets/queries/constructor/interval/interval.3.query.aql
M asterix-app/src/test/resources/runtimets/queries/temporal/accessors_interval/accessors_interval.3.query.aql
M asterix-app/src/test/resources/runtimets/queries/temporal/duration_functions/duration_functions.3.query.aql
M asterix-app/src/test/resources/runtimets/queries/temporal/get_overlapping_interval/get_overlapping_interval.3.query.aql
M asterix-app/src/test/resources/runtimets/queries/temporal/interval_functions/interval_functions.3.query.aql
M asterix-app/src/test/resources/runtimets/queries/temporal/overlap_bins/overlap_bins.3.query.aql
M asterix-app/src/test/resources/runtimets/queries/temporal/overlap_bins_gby_3/overlap_bins_gby_3.3.query.aql
M asterix-app/src/test/resources/runtimets/queries_sqlpp/comparison/issue363_equality/issue363_equality.3.query.sqlpp
M asterix-app/src/test/resources/runtimets/queries_sqlpp/comparison/issue363_inequality_interval/issue363_inequality_interval.3.query.sqlpp
M asterix-app/src/test/resources/runtimets/queries_sqlpp/constructor/interval/interval.3.query.sqlpp
M asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/accessors_interval/accessors_interval.3.query.sqlpp
M asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/duration_functions/duration_functions.3.query.sqlpp
M asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/get_overlapping_interval/get_overlapping_interval.3.query.sqlpp
M asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_functions/interval_functions.3.query.sqlpp
M asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/overlap_bins/overlap_bins.3.query.sqlpp
M asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/overlap_bins_gby_3/overlap_bins_gby_3.3.query.sqlpp
M asterix-app/src/test/resources/runtimets/results/comparison/interval_order/interval_order.3.adm
M asterix-app/src/test/resources/runtimets/results/comparison/interval_order/interval_order.4.adm
M asterix-app/src/test/resources/runtimets/results/constructor/interval/interval.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/get_overlapping_interval/get_overlapping_interval.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/insert_from_ext_ds/insert_from_ext_ds.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/insert_from_ext_ds_2/insert_from_ext_ds_2.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/interval_bin/interval_bin.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/interval_bin_gby_0/interval_bin_gby_0.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/interval_bin_gby_1/interval_bin_gby_1.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/overlap_bins/overlap_bins.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/overlap_bins_gby_0/overlap_bins_gby_0.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/overlap_bins_gby_1/overlap_bins_gby_1.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/overlap_bins_gby_3/overlap_bins_gby_3.1.adm
M asterix-app/src/test/resources/runtimets/results_parser_sqlpp/comparison/issue363_equality/issue363_equality.3.ast
M asterix-app/src/test/resources/runtimets/results_parser_sqlpp/comparison/issue363_inequality_interval/issue363_inequality_interval.3.ast
M asterix-app/src/test/resources/runtimets/results_parser_sqlpp/constructor/interval/interval.3.ast
M asterix-app/src/test/resources/runtimets/results_parser_sqlpp/temporal/accessors_interval/accessors_interval.3.ast
M asterix-app/src/test/resources/runtimets/results_parser_sqlpp/temporal/duration_functions/duration_functions.3.ast
M asterix-app/src/test/resources/runtimets/results_parser_sqlpp/temporal/get_overlapping_interval/get_overlapping_interval.3.ast
M asterix-app/src/test/resources/runtimets/results_parser_sqlpp/temporal/interval_functions/interval_functions.3.ast
M asterix-app/src/test/resources/runtimets/results_parser_sqlpp/temporal/overlap_bins/overlap_bins.3.ast
M asterix-app/src/test/resources/runtimets/results_parser_sqlpp/temporal/overlap_bins_gby_3/overlap_bins_gby_3.3.ast
M asterix-app/src/test/resources/runtimets/testsuite.xml
M asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
M asterix-app/src/test/resources/runtimets/testsuite_sqlpp_parser.xml
M asterix-doc/src/site/markdown/aql/allens.md
M asterix-doc/src/site/markdown/aql/datamodel.md
M asterix-doc/src/site/markdown/aql/functions.md
M asterix-external-data/src/main/java/org/apache/asterix/external/parser/ADMDataParser.java
M asterix-external-data/src/main/java/org/apache/asterix/external/parser/AbstractDataParser.java
M asterix-external-data/src/main/resources/adm.grammar
M asterix-external-data/src/test/java/org/apache/asterix/runtime/operator/file/ADMDataParserTest.java
M asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AIntervalAscPartialBinaryComparatorFactory.java
M asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AIntervalDescPartialBinaryComparatorFactory.java
M asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/adm/AIntervalPrinter.java
M asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/clean/AIntervalPrinter.java
M asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/lossless/AIntervalPrinter.java
M asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AIntervalSerializerDeserializer.java
M asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AOrderedListSerializerDeserializer.java
M asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AUnorderedListSerializerDeserializer.java
M asterix-om/src/main/java/org/apache/asterix/om/functions/AsterixBuiltinFunctions.java
M asterix-om/src/main/java/org/apache/asterix/om/pointables/AListVisitablePointable.java
M asterix-om/src/main/java/org/apache/asterix/om/pointables/printer/json/clean/APrintVisitor.java
M asterix-om/src/main/java/org/apache/asterix/om/pointables/printer/json/lossless/APrintVisitor.java
M asterix-om/src/main/java/org/apache/asterix/om/util/NonTaggedFormatUtil.java
R asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AIntervalConstructorDescriptor.java
D asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AIntervalFromDateTimeConstructorDescriptor.java
D asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AIntervalFromTimeConstructorDescriptor.java
M asterix-runtime/src/main/java/org/apache/asterix/runtime/formats/NonTaggedDataFormat.java
71 files changed, 1,038 insertions(+), 1,409 deletions(-)

Approvals:
  Till Westmann: Looks good to me, approved
  Jenkins: Verified



diff --git a/asterix-app/data/temporal/simpletemp_30.json b/asterix-app/data/temporal/simpletemp_30.json
index dcc9d8c..fe3406a 100644
--- a/asterix-app/data/temporal/simpletemp_30.json
+++ b/asterix-app/data/temporal/simpletemp_30.json
@@ -1,3 +1,3 @@
-{ "date": date("4619-11-23"), "time": time("14:29:36.786Z"), "datetime": datetime("2749-01-27T17:27:30.020Z"), "duration": duration("-P474133Y7M854630DT4H40M6.45S"), "year-month-duration": year-month-duration("P193989Y3M"), "day-time-duration": day-time-duration("P4477686DT4H49M31.87S"), "date-interval": interval-date("-9537-08-04, 9656-06-03"), "time-interval": interval-time("12:04:45.689Z, 12:41:59.002Z"), "datetime-interval": interval-datetime("-2640-10-11T17:32:15.675Z, 4104-02-01T05:59:11.902Z") }
-{ "date": date("-9971-09-24"), "time": time("11:38:17.154Z"), "datetime": datetime("1259-11-13T09:49:11.852Z"), "duration": duration("P473653Y9M4566143DT10H20M53.61S"), "year-month-duration": year-month-duration("P148233Y10M"), "day-time-duration": day-time-duration("-P7236357DT2H56M56.164S"), "date-interval": interval-date("-0255-09-06, 4925-05-03"), "time-interval": interval-time("12:10:45.169Z, 15:37:48.736Z"), "datetime-interval": interval-datetime("0534-12-08T08:20:31.487Z, 6778-02-16T22:40:21.653Z") }
-{ "date": date("7986-11-25"), "time": time("12:49:39.736Z"), "datetime": datetime("-8337-01-30T15:23:07.598Z"), "duration": duration("-P184484Y7M2241423DT10H42M49.500S"), "year-month-duration": year-month-duration("-P546031Y3M"), "day-time-duration": day-time-duration("P2623386DT10H32M31.983S"), "date-interval": interval-date("-4514-05-24, 3337-08-26"), "time-interval": interval-time("04:16:42.321Z, 12:22:56.816Z"), "datetime-interval": interval-datetime("2129-12-12T13:18:35.758Z, 8647-07-01T13:10:19.691Z") }
+{ "date": date("4619-11-23"), "time": time("14:29:36.786Z"), "datetime": datetime("2749-01-27T17:27:30.020Z"), "duration": duration("-P474133Y7M854630DT4H40M6.45S"), "year-month-duration": year-month-duration("P193989Y3M"), "day-time-duration": day-time-duration("P4477686DT4H49M31.87S"), "date-interval": interval(date("-9537-08-04"), date("9656-06-03")), "time-interval": interval(time("12:04:45.689Z"), time("12:41:59.002Z")), "datetime-interval": interval(datetime("-2640-10-11T17:32:15.675Z"), datetime("4104-02-01T05:59:11.902Z")) }
+{ "date": date("-9971-09-24"), "time": time("11:38:17.154Z"), "datetime": datetime("1259-11-13T09:49:11.852Z"), "duration": duration("P473653Y9M4566143DT10H20M53.61S"), "year-month-duration": year-month-duration("P148233Y10M"), "day-time-duration": day-time-duration("-P7236357DT2H56M56.164S"), "date-interval": interval(date("-0255-09-06"), date("4925-05-03")), "time-interval": interval(time("12:10:45.169Z"), time("15:37:48.736Z")), "datetime-interval": interval(datetime("0534-12-08T08:20:31.487Z"), datetime("6778-02-16T22:40:21.653Z")) }
+{ "date": date("7986-11-25"), "time": time("12:49:39.736Z"), "datetime": datetime("-8337-01-30T15:23:07.598Z"), "duration": duration("-P184484Y7M2241423DT10H42M49.500S"), "year-month-duration": year-month-duration("-P546031Y3M"), "day-time-duration": day-time-duration("P2623386DT10H32M31.983S"), "date-interval": interval(date("-4514-05-24"), date("3337-08-26")), "time-interval": interval(time("04:16:42.321Z"), time("12:22:56.816Z")), "datetime-interval": interval(datetime("2129-12-12T13:18:35.758Z"), datetime("8647-07-01T13:10:19.691Z")) }
\ No newline at end of file
diff --git a/asterix-app/data/temporal/temporalData.json b/asterix-app/data/temporal/temporalData.json
index bedf2c7..6d662f9 100644
--- a/asterix-app/data/temporal/temporalData.json
+++ b/asterix-app/data/temporal/temporalData.json
@@ -1,4 +1,4 @@
-{"id": "001", "dateField": date("-2012-12-12"), "dateFieldPlus": date("0990-01-01"), "timeField": time("23:49:12.39Z"), "timeFieldPlus": time("03:23:12.2"), "datetimeField": datetime("2012-12-12T00:00:00.001"), "datetimeFieldPlus": datetime("-00130810T221015398"), "durationField": duration("P20Y19DT3H74M23.34S"), "durationFieldPlus": duration("-P2MT4M300.68S"), "intervalField": interval-datetime("2012-12-12T00:00:00.001,20130810T221015398") }
-{"id": "002", "timeField": time("12:12:12.219+08:00"), "timeField2": time("13:13:13.321-08:00"), "datetimeField": datetime("19201220T232918478-1200"), "intervalField": interval-time("12:29:30+08:00, 235959999-0800") }
-{"id": "003", "durationField": duration("-P27Y48DT2400H"), "datetimeField": datetime("-0290-03-23T00:59:48.999+07:00"), "intervalField": interval-date("-2012-03-17, 2013-04-01"), "intervalPlus": interval-time("19:23:32.328Z,23:20:20") }
+{"id": "001", "dateField": date("-2012-12-12"), "dateFieldPlus": date("0990-01-01"), "timeField": time("23:49:12.39Z"), "timeFieldPlus": time("03:23:12.2"), "datetimeField": datetime("2012-12-12T00:00:00.001"), "datetimeFieldPlus": datetime("-00130810T221015398"), "durationField": duration("P20Y19DT3H74M23.34S"), "durationFieldPlus": duration("-P2MT4M300.68S"), "intervalField": interval(datetime("2012-12-12T00:00:00.001"),datetime("20130810T221015398")) }
+{"id": "002", "timeField": time("12:12:12.219+08:00"), "timeField2": time("13:13:13.321-08:00"), "datetimeField": datetime("19201220T232918478-1200"), "intervalField": interval(time("12:29:30+08:00"), time("235959999-0800")) }
+{"id": "003", "durationField": duration("-P27Y48DT2400H"), "datetimeField": datetime("-0290-03-23T00:59:48.999+07:00"), "intervalField": interval(date("-2012-03-17"), date("2013-04-01")), "intervalPlus": interval(time("19:23:32.328Z"), time("23:20:20")) }
 {"id": "003", "dayTimeDurationField": day-time-duration("-P48DT2400H"), "yearMonthDurationField": year-month-duration("P27Y50M") }
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/queries/comparison/interval_order/interval_order.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/interval_order/interval_order.3.query.aql
index 8ccca18..23b820c 100644
--- a/asterix-app/src/test/resources/runtimets/queries/comparison/interval_order/interval_order.3.query.aql
+++ b/asterix-app/src/test/resources/runtimets/queries/comparison/interval_order/interval_order.3.query.aql
@@ -18,13 +18,13 @@
  */
 use dataverse test;
 
-let $id1 := interval-from-date("2002-01-01", "2003-01-01")
-let $id2 := interval-from-date("2006-01-01", "2010-01-01")
-let $id3 := interval-from-date("2001-01-01", "2010-01-01")
-let $id4 := interval-from-date("2003-01-01", "2008-01-01")
-let $id5 := interval-from-date("2002-01-01", "2010-01-01")
-let $id6 := interval-from-date("2004-01-01", "2009-01-01")
-let $id7 := interval-from-date("2003-01-01", "2008-01-01")
+let $id1 := interval(date("2002-01-01"), date("2003-01-01"))
+let $id2 := interval(date("2006-01-01"), date("2010-01-01"))
+let $id3 := interval(date("2001-01-01"), date("2010-01-01"))
+let $id4 := interval(date("2003-01-01"), date("2008-01-01"))
+let $id5 := interval(date("2002-01-01"), date("2010-01-01"))
+let $id6 := interval(date("2004-01-01"), date("2009-01-01"))
+let $id7 := interval(date("2003-01-01"), date("2008-01-01"))
 
 for $id in [$id1, $id2, $id3, $id4, $id5, $id6, $id7]
 order by $id
diff --git a/asterix-app/src/test/resources/runtimets/queries/comparison/interval_order/interval_order.4.query.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/interval_order/interval_order.4.query.aql
index e0d9410..b16313e 100644
--- a/asterix-app/src/test/resources/runtimets/queries/comparison/interval_order/interval_order.4.query.aql
+++ b/asterix-app/src/test/resources/runtimets/queries/comparison/interval_order/interval_order.4.query.aql
@@ -18,13 +18,13 @@
  */
 use dataverse test;
 
-let $id1 := interval-from-date("2002-01-01", "2003-01-01")
-let $id2 := interval-from-date("2006-01-01", "2010-01-01")
-let $id3 := interval-from-date("2001-01-01", "2010-01-01")
-let $id4 := interval-from-date("2003-01-01", "2008-01-01")
-let $id5 := interval-from-date("2002-01-01", "2010-01-01")
-let $id6 := interval-from-date("2004-01-01", "2009-01-01")
-let $id7 := interval-from-date("2003-01-01", "2008-01-01")
+let $id1 := interval(date("2002-01-01"), date("2003-01-01"))
+let $id2 := interval(date("2006-01-01"), date("2010-01-01"))
+let $id3 := interval(date("2001-01-01"), date("2010-01-01"))
+let $id4 := interval(date("2003-01-01"), date("2008-01-01"))
+let $id5 := interval(date("2002-01-01"), date("2010-01-01"))
+let $id6 := interval(date("2004-01-01"), date("2009-01-01"))
+let $id7 := interval(date("2003-01-01"), date("2008-01-01"))
 
 for $id in [$id1, $id2, $id3, $id4, $id5, $id6, $id7]
 order by $id desc
diff --git a/asterix-app/src/test/resources/runtimets/queries/comparison/issue363_equality/issue363_equality.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/issue363_equality/issue363_equality.3.query.aql
index 037ce47..b6564eb 100644
--- a/asterix-app/src/test/resources/runtimets/queries/comparison/issue363_equality/issue363_equality.3.query.aql
+++ b/asterix-app/src/test/resources/runtimets/queries/comparison/issue363_equality/issue363_equality.3.query.aql
@@ -31,7 +31,7 @@
 let $v6 := polygon("-1.0,+10.5e2 -02.15E+50,2.5 -1.0,+3.3e3 -2.50E+05,20.15 +3.5e+2,03.6 -4.60E-3,+4.75 -2,+1.0e2 -2.00E+5,20.10 30.5,03.25 -4.33E-3,+4.75")
 let $v7 := circle("0.1234,-1.00e-10 +10.5E-2")
 let $v8 := rectangle("0.1234,-1.00e-10 5.5487,0.48765")
-let $v9 := interval-from-datetime(datetime("-1987-11-19T02:43:57.938+08:00"), datetime("19991112T124935948-0700"))
+let $v9 := interval(datetime("-1987-11-19T02:43:57.938+08:00"), datetime("19991112T124935948-0700"))
 let $dv1 := duration("P3Y6M3DT9H5M2.348S")
 let $dv2 := year-month-duration("P3Y6M")
 let $dv3 := day-time-duration("P3DT9H5M2.348S")
@@ -40,7 +40,7 @@
 let $dv6 := polygon("-1.0,+10.5e2 -02.15E+50,2.5 -1.0,+3.3e3 -2.50E+05,20.15 +3.5e+2,03.6 -4.60E-3,+4.75 -2,+1.0e2 -2.00E+5,20.10 30.5,03.25 -4.33E-3,+4.75")
 let $dv7 := circle("0.1234,-1.00e-10 +10.5E-2")
 let $dv8 := rectangle("0.1234,-1.00e-10 5.5487,0.48765")
-let $dv9 := interval-from-datetime(datetime("-1987-11-19T02:43:57.938+08:00"), datetime("19991112T124935948-0700"))
+let $dv9 := interval(datetime("-1987-11-19T02:43:57.938+08:00"), datetime("19991112T124935948-0700"))
 let $ndv1 := duration("P4Y6M3DT9H5M2.348S")
 let $ndv2 := year-month-duration("P3Y7M")
 let $ndv3 := day-time-duration("P3DT1H5M2.348S")
@@ -49,22 +49,22 @@
 let $ndv6 := polygon("-1.0,+10.5e2 -02.19E+50,2.5 -1.0,+3.3e3 -2.50E+05,20.15 +3.5e+2,03.6 -4.60E-3,+4.75 -2,+1.0e2 -2.00E+5,20.10 30.5,03.25 -4.33E-3,+4.75")
 let $ndv7 := circle("0.5678,-1.00e-10 +10.5E-2")
 let $ndv8 := rectangle("0.5678,-1.00e-10 5.5487,0.48765")
-let $ndv9 := interval-from-datetime(datetime("-1983-11-19T02:43:57.938+08:00"), datetime("19991112T124935948-0700"))
+let $ndv9 := interval(datetime("-1983-11-19T02:43:57.938+08:00"), datetime("19991112T124935948-0700"))
 
-return { "duration":  $v1 = $dv1, 
-"year-month-duration":  $v2 = $dv2, 
-"day-time-duration":  $v3 = $dv3, 
-"point": $v4 = $dv4, 
-"line": $v5 = $dv5, 
+return { "duration":  $v1 = $dv1,
+"year-month-duration":  $v2 = $dv2,
+"day-time-duration":  $v3 = $dv3,
+"point": $v4 = $dv4,
+"line": $v5 = $dv5,
 "polygon": $v6 = $dv6,
 "circle": $v7 = $dv7,
 "rectangle": $v8 = $dv8,
 "interval": $v9 = $dv9,
-"duration2":  $v1 != $ndv1, 
-"year-month-duration2": $v2 != $ndv2, 
-"day-time-duration2":  $v3 != $ndv3, 
-"point2": $v4 != $ndv4, 
-"line2": $v5 != $ndv5, 
+"duration2":  $v1 != $ndv1,
+"year-month-duration2": $v2 != $ndv2,
+"day-time-duration2":  $v3 != $ndv3,
+"point2": $v4 != $ndv4,
+"line2": $v5 != $ndv5,
 "polygon2": $v6 != $ndv6,
 "circle2": $v7 != $ndv7,
 "rectangle2": $v8 != $ndv8,
diff --git a/asterix-app/src/test/resources/runtimets/queries/comparison/issue363_inequality_interval/issue363_inequality_interval.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/issue363_inequality_interval/issue363_inequality_interval.3.query.aql
index bf20a2f..9d1a868 100644
--- a/asterix-app/src/test/resources/runtimets/queries/comparison/issue363_inequality_interval/issue363_inequality_interval.3.query.aql
+++ b/asterix-app/src/test/resources/runtimets/queries/comparison/issue363_inequality_interval/issue363_inequality_interval.3.query.aql
@@ -22,8 +22,8 @@
  * Date         : 9 May 2013
  * Issue        : 363
  */
- 
-let $v1 := interval-from-datetime(datetime("-1987-11-19T02:43:57.938+08:00"), datetime("19991112T124935948-0700"))
-let $dv1 := interval-from-datetime(datetime("-1983-11-19T02:43:57.938+08:00"), datetime("19991112T124935948-0700"))
+
+let $v1 := interval(datetime("-1987-11-19T02:43:57.938+08:00"), datetime("19991112T124935948-0700"))
+let $dv1 := interval(datetime("-1983-11-19T02:43:57.938+08:00"), datetime("19991112T124935948-0700"))
 
 return { "interval0":  $v1 > $dv1, "interval1": $dv1 < $v1, "interval2":  $v1 >= $dv1, "interval3": $dv1 <= $v1 }
diff --git a/asterix-app/src/test/resources/runtimets/queries/constructor/interval/interval.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/interval/interval.3.query.aql
index 2e1b6f6..b5eb998 100644
--- a/asterix-app/src/test/resources/runtimets/queries/constructor/interval/interval.3.query.aql
+++ b/asterix-app/src/test/resources/runtimets/queries/constructor/interval/interval.3.query.aql
@@ -19,24 +19,6 @@
 
 use dataverse test;
 
-let $itv11 := interval-from-date(date("2010-10-30"), date("2012-10-21"))
-let $itv12 := interval-from-date("2010-10-30", date("2012-10-21"))
-let $itv13 := interval-from-date(date("2010-10-30"), "2012-10-21")
-let $itv14 := interval-from-date("2010-10-30", "2012-10-21")
-let $itv15 := interval-from-date(null, "2012-10-21")
-let $itv16 := interval-from-date("2010-10-30", null)
-let $itv21 := interval-from-time(time("03:04:05.678-11:00"), time("232425267+0200"))
-let $itv22 := interval-from-time("03:04:05.678-11:00", time("232425267+0200"))
-let $itv23 := interval-from-time(time("03:04:05.678-11:00"), "232425267+0200")
-let $itv24 := interval-from-time("03:04:05.678-11:00", "232425267+0200")
-let $itv25 := interval-from-time(null, time("232425267+0200"))
-let $itv26 := interval-from-time(time("03:04:05.678-11:00"), null)
-let $itv31 := interval-from-datetime(datetime("-1987-11-19T02:43:57.938+08:00"), datetime("19991112T124935948-0700"))
-let $itv32 := interval-from-datetime("-1987-11-19T02:43:57.938+08:00", datetime("19991112T124935948-0700"))
-let $itv33 := interval-from-datetime(datetime("-1987-11-19T02:43:57.938+08:00"), "19991112T124935948-0700")
-let $itv34 := interval-from-datetime("-1987-11-19T02:43:57.938+08:00", "19991112T124935948-0700")
-let $itv35 := interval-from-datetime(null, datetime("19991112T124935948-0700"))
-let $itv36 := interval-from-datetime(datetime("-1987-11-19T02:43:57.938+08:00"), null)
 let $itv41 := interval-start-from-date(date("0001-12-27"), duration("P3Y394DT48H398.483S"))
 let $itv42 := interval-start-from-date("0001-12-27", duration("P3Y394DT48H398.483S"))
 let $itv43 := interval-start-from-date(date("0001-12-27"), "P3Y394DT48H398.483S")
@@ -55,6 +37,15 @@
 let $itv64 := interval-start-from-datetime("-2043-11-19T15:32:39.293", "P439Y3M20DT20H39M58.949S")
 let $itv65 := interval-start-from-datetime(null, duration("P439Y3M20DT20H39M58.949S"))
 let $itv66 := interval-start-from-datetime(datetime("-2043-11-19T15:32:39.293"), null)
+let $itv71 := interval(date("2010-10-30"), date("2012-10-21"))
+let $itv72 := interval(null, date("2012-10-21"))
+let $itv73 := interval(date("2010-10-30"), null)
+let $itv74 := interval(time("03:04:05.678-11:00"), time("232425267+0200"))
+let $itv75 := interval(null, time("232425267+0200"))
+let $itv76 := interval(time("03:04:05.678-11:00"), null)
+let $itv77 := interval(datetime("-1987-11-19T02:43:57.938+08:00"), datetime("19991112T124935948-0700"))
+let $itv78 := interval(null, datetime("19991112T124935948-0700"))
+let $itv79 := interval(datetime("-1987-11-19T02:43:57.938+08:00"), null)
 
-return {"interval11": $itv11, "interval12": $itv12, "interval13": $itv13, "interval14": $itv14, "interval15": $itv15, "interval16": $itv16, "interval21": $itv21, "interval22": $itv22, "interval23": $itv23, "interval24": $itv24, "interval25": $itv25, "interval26": $itv26, "interval31": $itv31, "interval32": $itv32, "interval33": $itv33, "interval34": $itv34, "interval35": $itv35, "interval36": $itv36, "interval41": $itv41, "interval42": $itv42, "interval43": $itv43, "interval44": $itv44, "interval45": $itv45, "interval46": $itv46, "interval51": $itv51, "interval52": $itv52, "interval53": $itv53, "interval54": $itv54, "interval55": $itv55, "interval56": $itv56, "interval61": $itv61, "interval62": $itv62, "interval63": $itv63, "interval64": $itv64, "interval65": $itv65, "interval66": $itv66}
+return {"interval41": $itv41, "interval42": $itv42, "interval43": $itv43, "interval44": $itv44, "interval45": $itv45, "interval46": $itv46, "interval51": $itv51, "interval52": $itv52, "interval53": $itv53, "interval54": $itv54, "interval55": $itv55, "interval56": $itv56, "interval61": $itv61, "interval62": $itv62, "interval63": $itv63, "interval64": $itv64, "interval65": $itv65, "interval66": $itv66, "interval71": $itv71, "interval72": $itv72, "interval73": $itv73, "interval74": $itv74, "interval75": $itv75, "interval76": $itv76, "interval77": $itv77, "interval78": $itv78, "interval79": $itv79}
 
diff --git a/asterix-app/src/test/resources/runtimets/queries/temporal/accessors_interval/accessors_interval.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/temporal/accessors_interval/accessors_interval.3.query.aql
index 78e97d9..7f9101e 100644
--- a/asterix-app/src/test/resources/runtimets/queries/temporal/accessors_interval/accessors_interval.3.query.aql
+++ b/asterix-app/src/test/resources/runtimets/queries/temporal/accessors_interval/accessors_interval.3.query.aql
@@ -18,8 +18,8 @@
  */
 use dataverse test;
 
-let $interval1 := interval-from-date(date("2010-10-30"), "2013-04-01")
-let $interval2 := interval-from-time("08:09:10.234Z", time("203040567+0800"))
-let $interval3 := interval-from-datetime("2009-09-01T00:00:00.000+08:00", datetime-from-date-time(date("2013-04-04"), time("00:00:00.000+08:00")))
+let $interval1 := interval(date("2010-10-30"), date("2013-04-01"))
+let $interval2 := interval(time("08:09:10.234Z"), time("203040567+0800"))
+let $interval3 := interval(datetime("2009-09-01T00:00:00.000+08:00"), datetime-from-date-time(date("2013-04-04"), time("00:00:00.000+08:00")))
 
 return {"start1": get-interval-start($interval1), "end1": get-interval-end($interval1), "start2": get-interval-start($interval2), "end2": get-interval-end($interval2), "start3": get-interval-start($interval3), "end3": get-interval-end($interval3) }
diff --git a/asterix-app/src/test/resources/runtimets/queries/temporal/duration_functions/duration_functions.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/temporal/duration_functions/duration_functions.3.query.aql
index 9b51407..e080b49 100644
--- a/asterix-app/src/test/resources/runtimets/queries/temporal/duration_functions/duration_functions.3.query.aql
+++ b/asterix-app/src/test/resources/runtimets/queries/temporal/duration_functions/duration_functions.3.query.aql
@@ -24,9 +24,9 @@
 
 use dataverse test;
 
-let $itv1 := interval-from-date("2010-10-30", "2010-12-21")
-let $itv2 := interval-from-datetime("2012-06-26T01:01:01.111", "2012-07-27T02:02:02.222")
-let $itv3 := interval-from-time("12:32:38", "20:29:20")
+let $itv1 := interval(date("2010-10-30"), date("2010-12-21"))
+let $itv2 := interval(datetime("2012-06-26T01:01:01.111"), datetime("2012-07-27T02:02:02.222"))
+let $itv3 := interval(time("12:32:38"), time("20:29:20"))
 
 return { "dr1" : duration-from-interval($itv1),
          "dr2" : duration-from-interval($itv2),
diff --git a/asterix-app/src/test/resources/runtimets/queries/temporal/get_overlapping_interval/get_overlapping_interval.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/temporal/get_overlapping_interval/get_overlapping_interval.3.query.aql
index bc410ca..57afc1d 100644
--- a/asterix-app/src/test/resources/runtimets/queries/temporal/get_overlapping_interval/get_overlapping_interval.3.query.aql
+++ b/asterix-app/src/test/resources/runtimets/queries/temporal/get_overlapping_interval/get_overlapping_interval.3.query.aql
@@ -21,9 +21,9 @@
  * Expected result: success
  **/
 
-{ "overlap1": get-overlapping-interval(interval-from-time(time("11:23:39"), time("18:27:19")), interval-from-time(time("12:23:39"), time("23:18:00"))), 
-  "overlap2": get-overlapping-interval(interval-from-time(time("12:23:39"), time("18:27:19")), interval-from-time(time("07:19:39"), time("09:18:00"))),
-  "overlap3": get-overlapping-interval(interval-from-date(date("1980-11-30"), date("1999-09-09")), interval-from-date(date("2013-01-01"), date("2014-01-01"))),
-  "overlap4": get-overlapping-interval(interval-from-date(date("1980-11-30"), date("2099-09-09")), interval-from-date(date("2013-01-01"), date("2014-01-01"))),
-  "overlap5": get-overlapping-interval(interval-from-datetime(datetime("1844-03-03T11:19:39"), datetime("2000-10-30T18:27:19")), interval-from-datetime(datetime("1989-03-04T12:23:39"), datetime("2009-10-10T23:18:00"))),
-  "overlap6": get-overlapping-interval(interval-from-datetime(datetime("1989-03-04T12:23:39"), datetime("2000-10-30T18:27:19")), interval-from-datetime(datetime("1844-03-03T11:19:39"), datetime("1888-10-10T23:18:00")))  }
+{ "overlap1": get-overlapping-interval(interval(time("11:23:39"), time("18:27:19")), interval(time("12:23:39"), time("23:18:00"))),
+  "overlap2": get-overlapping-interval(interval(time("12:23:39"), time("18:27:19")), interval(time("07:19:39"), time("09:18:00"))),
+  "overlap3": get-overlapping-interval(interval(date("1980-11-30"), date("1999-09-09")), interval(date("2013-01-01"), date("2014-01-01"))),
+  "overlap4": get-overlapping-interval(interval(date("1980-11-30"), date("2099-09-09")), interval(date("2013-01-01"), date("2014-01-01"))),
+  "overlap5": get-overlapping-interval(interval(datetime("1844-03-03T11:19:39"), datetime("2000-10-30T18:27:19")), interval(datetime("1989-03-04T12:23:39"), datetime("2009-10-10T23:18:00"))),
+  "overlap6": get-overlapping-interval(interval(datetime("1989-03-04T12:23:39"), datetime("2000-10-30T18:27:19")), interval(datetime("1844-03-03T11:19:39"), datetime("1888-10-10T23:18:00")))  }
diff --git a/asterix-app/src/test/resources/runtimets/queries/temporal/interval_functions/interval_functions.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/temporal/interval_functions/interval_functions.3.query.aql
index d986a1e..62ed6a9 100644
--- a/asterix-app/src/test/resources/runtimets/queries/temporal/interval_functions/interval_functions.3.query.aql
+++ b/asterix-app/src/test/resources/runtimets/queries/temporal/interval_functions/interval_functions.3.query.aql
@@ -18,25 +18,25 @@
  */
 use dataverse test;
 
-let $itv1 := interval-from-date("2010-10-30", "2010-12-21")
-let $itv2 := interval-from-date("2011-10-30", "2012-10-21")
-let $itv3 := interval-from-date("2010-12-21", "2013-01-01")
+let $itv1 := interval(date("2010-10-30"), date("2010-12-21"))
+let $itv2 := interval(date("2011-10-30"), date("2012-10-21"))
+let $itv3 := interval(date("2010-12-21"), date("2013-01-01"))
 let $blnBefore1 := interval-before($itv1, $itv2)
 let $blnAfter1 := interval-after($itv2, $itv1)
 let $blnBefore2 := interval-before($itv1, $itv3)
 let $blnAfter2 := interval-after($itv3, $itv1)
 
-let $itv4 := interval-from-datetime("2012-06-26T01:01:01.111", "2012-07-27T02:02:02.222")
-let $itv5 := interval-from-datetime("20120727T020202222", "2013-08-08T03:03:03.333")
-let $itv6 := interval-from-datetime("19000707T020202222", "2013-08-07T03:03:03.333")
+let $itv4 := interval(datetime("2012-06-26T01:01:01.111"), datetime("2012-07-27T02:02:02.222"))
+let $itv5 := interval(datetime("20120727T020202222"), datetime("2013-08-08T03:03:03.333"))
+let $itv6 := interval(datetime("19000707T020202222"), datetime("2013-08-07T03:03:03.333"))
 let $blnMeet1 := interval-meets($itv4, $itv5)
 let $blnMetBy1 := interval-met-by($itv5, $itv4)
 let $blnMeet2 := interval-meets($itv6, $itv4)
 let $blnMetBy2 := interval-met-by($itv6, $itv4)
 
-let $itv7 := interval-from-time("12:32:38", "20:29:20")
-let $itv8 := interval-from-time("17:48:19", "22:19:49")
-let $itv9 := interval-from-time("01:32:49", "17:48:19")
+let $itv7 := interval(time("12:32:38"), time("20:29:20"))
+let $itv8 := interval(time("17:48:19"), time("22:19:49"))
+let $itv9 := interval(time("01:32:49"), time("17:48:19"))
 let $blnOverlaps1 := interval-overlaps($itv7, $itv8)
 let $blnOverlapped1 := interval-overlapped-by($itv8, $itv7)
 let $blnOverlaps2 := interval-overlaps($itv9, $itv8)
@@ -44,21 +44,21 @@
 let $blnOverlap1 := interval-overlapping($itv9, $itv7)
 let $blnOverlap2 := interval-overlapping($itv9, $itv8)
 
-let $itv10 := interval-from-date("2010-10-30", "2010-11-30")
+let $itv10 := interval(date("2010-10-30"), date("2010-11-30"))
 let $blnStarts1 := interval-starts($itv10, $itv1)
 let $blnStarts2 := interval-starts($itv10, $itv2)
 let $blnStartedBy1 := interval-started-by($itv1, $itv10)
 let $blnStartedBy2 := interval-started-by($itv10, $itv2)
 
-let $itv10 := interval-from-datetime("19000707T020202222", "2013-08-07T03:03:03.333")
-let $itv11 := interval-from-datetime("19990707T020202222", "2013-08-07T03:03:03.333")
-let $itv12 := interval-from-datetime("-19990707T020202222", "2013-08-07T03:03:03.333")
+let $itv10 := interval(datetime("19000707T020202222"), datetime("2013-08-07T03:03:03.333"))
+let $itv11 := interval(datetime("19990707T020202222"), datetime("2013-08-07T03:03:03.333"))
+let $itv12 := interval(datetime("-19990707T020202222"), datetime("2013-08-07T03:03:03.333"))
 let $blnCovers1 := interval-covers($itv10, $itv11)
 let $blnCovers2 := interval-covers($itv10, $itv12)
 let $blnCoveredBy1 := interval-covered-by($itv11, $itv10)
 let $blnCoveredBy2 := interval-covered-by($itv12, $itv10)
 
-let $itv11 := interval-from-time("19:00:00.009", "20:29:20.000")
+let $itv11 := interval(time("19:00:00.009"), time("20:29:20.000"))
 let $blnEnds1 := interval-ends($itv11, $itv7)
 let $blnEnds2 := interval-ends($itv11, $itv8)
 let $blnEndedBy1 := interval-ended-by($itv7, $itv11)
diff --git a/asterix-app/src/test/resources/runtimets/queries/temporal/overlap_bins/overlap_bins.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/temporal/overlap_bins/overlap_bins.3.query.aql
index 6b2c252..8011ad6 100644
--- a/asterix-app/src/test/resources/runtimets/queries/temporal/overlap_bins/overlap_bins.3.query.aql
+++ b/asterix-app/src/test/resources/runtimets/queries/temporal/overlap_bins/overlap_bins.3.query.aql
@@ -21,9 +21,9 @@
  * Expected result: success
  **/
 
-let $itv1 := interval-from-time(time("17:23:37"), time("18:30:21"))
-let $itv2 := interval-from-date(date("1984-03-17"), date("2013-08-22"))
-let $itv3 := interval-from-datetime(datetime("1800-01-01T23:59:48.938"), datetime("2015-07-26T13:28:30.218"))
+let $itv1 := interval(time("17:23:37"), time("18:30:21"))
+let $itv2 := interval(date("1984-03-17"), date("2013-08-22"))
+let $itv3 := interval(datetime("1800-01-01T23:59:48.938"), datetime("2015-07-26T13:28:30.218"))
 return { "timebins": overlap-bins($itv1, time("00:00:00"), day-time-duration("PT30M")),
          "datebins": overlap-bins($itv2, date("1990-01-01"), year-month-duration("P20Y")),
          "datetimebins": overlap-bins($itv3, datetime("1900-01-01T00:00:00.000"), year-month-duration("P100Y")) }
diff --git a/asterix-app/src/test/resources/runtimets/queries/temporal/overlap_bins_gby_3/overlap_bins_gby_3.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/temporal/overlap_bins_gby_3/overlap_bins_gby_3.3.query.aql
index 41c2781..1661d68 100644
--- a/asterix-app/src/test/resources/runtimets/queries/temporal/overlap_bins_gby_3/overlap_bins_gby_3.3.query.aql
+++ b/asterix-app/src/test/resources/runtimets/queries/temporal/overlap_bins_gby_3/overlap_bins_gby_3.3.query.aql
@@ -18,7 +18,7 @@
  */
 use dataverse multitask;
 
-for $bin in overlap-bins(interval-from-time(min(for $i in dataset logs return $i.time), max(for $i in dataset logs return $i.time + duration-from-ms($i.duration * 1000))), time("00:00:00.000"), day-time-duration("PT1M"))
+for $bin in overlap-bins(interval(min(for $i in dataset logs return $i.time), max(for $i in dataset logs return $i.time + duration-from-ms($i.duration * 1000))), time("00:00:00.000"), day-time-duration("PT1M"))
 order by get-interval-start($bin)
 return {
   "timebin": $bin,
diff --git a/asterix-app/src/test/resources/runtimets/queries_sqlpp/comparison/issue363_equality/issue363_equality.3.query.sqlpp b/asterix-app/src/test/resources/runtimets/queries_sqlpp/comparison/issue363_equality/issue363_equality.3.query.sqlpp
index da2e983..315b435 100644
--- a/asterix-app/src/test/resources/runtimets/queries_sqlpp/comparison/issue363_equality/issue363_equality.3.query.sqlpp
+++ b/asterix-app/src/test/resources/runtimets/queries_sqlpp/comparison/issue363_equality/issue363_equality.3.query.sqlpp
@@ -23,4 +23,21 @@
  * Issue        : 363
  */
 
-{'duration':(duration('P3Y6M3DT9H5M2.348S') = duration('P3Y6M3DT9H5M2.348S')),'year-month-duration':("year-month-duration"('P3Y6M') = "year-month-duration"('P3Y6M')),'day-time-duration':("day-time-duration"('P3DT9H5M2.348S') = "day-time-duration"('P3DT9H5M2.348S')),'point':(point('47.44,80.65') = point('47.44,80.65')),'line':(line('10.1234,11.1e-1 +10.2E-2,-11.22') = line('10.1234,11.1e-1 +10.2E-2,-11.22')),'polygon':(polygon('-1.0,+10.5e2 -02.15E+50,2.5 -1.0,+3.3e3 -2.50E+05,20.15 +3.5e+2,03.6 -4.60E-3,+4.75 -2,+1.0e2 -2.00E+5,20.10 30.5,03.25 -4.33E-3,+4.75') = polygon('-1.0,+10.5e2 -02.15E+50,2.5 -1.0,+3.3e3 -2.50E+05,20.15 +3.5e+2,03.6 -4.60E-3,+4.75 -2,+1.0e2 -2.00E+5,20.10 30.5,03.25 -4.33E-3,+4.75')),'circle':(circle('0.1234,-1.00e-10 +10.5E-2') = circle('0.1234,-1.00e-10 +10.5E-2')),'rectangle':(rectangle('0.1234,-1.00e-10 5.5487,0.48765') = rectangle('0.1234,-1.00e-10 5.5487,0.48765')),'interval':("interval-from-datetime"(datetime('-1987-11-19T02:43:57.938+08:00'),d
 atetime('19991112T124935948-0700')) = "interval-from-datetime"(datetime('-1987-11-19T02:43:57.938+08:00'),datetime('19991112T124935948-0700'))),'duration2':(duration('P3Y6M3DT9H5M2.348S') != duration('P4Y6M3DT9H5M2.348S')),'year-month-duration2':("year-month-duration"('P3Y6M') != "year-month-duration"('P3Y7M')),'day-time-duration2':("day-time-duration"('P3DT9H5M2.348S') != "day-time-duration"('P3DT1H5M2.348S')),'point2':(point('47.44,80.65') != point('47.4444,80.65')),'line2':(line('10.1234,11.1e-1 +10.2E-2,-11.22') != line('10.5678,11.1e-1 +10.2E-2,-11.22')),'polygon2':(polygon('-1.0,+10.5e2 -02.15E+50,2.5 -1.0,+3.3e3 -2.50E+05,20.15 +3.5e+2,03.6 -4.60E-3,+4.75 -2,+1.0e2 -2.00E+5,20.10 30.5,03.25 -4.33E-3,+4.75') != polygon('-1.0,+10.5e2 -02.19E+50,2.5 -1.0,+3.3e3 -2.50E+05,20.15 +3.5e+2,03.6 -4.60E-3,+4.75 -2,+1.0e2 -2.00E+5,20.10 30.5,03.25 -4.33E-3,+4.75')),'circle2':(circle('0.1234,-1.00e-10 +10.5E-2') != circle('0.5678,-1.00e-10 +10.5E-2')),'rectangle2':(rectangle('0.1
 234,-1.00e-10 5.5487,0.48765') != rectangle('0.5678,-1.00e-10 5.5487,0.48765')),'interval2':("interval-from-datetime"(datetime('-1987-11-19T02:43:57.938+08:00'),datetime('19991112T124935948-0700')) != "interval-from-datetime"(datetime('-1983-11-19T02:43:57.938+08:00'),datetime('19991112T124935948-0700')))};
+{ 'duration':(duration('P3Y6M3DT9H5M2.348S') = duration('P3Y6M3DT9H5M2.348S')),
+  'year-month-duration':("year-month-duration"('P3Y6M') = "year-month-duration"('P3Y6M')),
+  'day-time-duration':("day-time-duration"('P3DT9H5M2.348S') = "day-time-duration"('P3DT9H5M2.348S')),
+  'point':(point('47.44,80.65') = point('47.44,80.65')),
+  'line':(line('10.1234,11.1e-1 +10.2E-2,-11.22') = line('10.1234,11.1e-1 +10.2E-2,-11.22')),
+  'polygon':(polygon('-1.0,+10.5e2 -02.15E+50,2.5 -1.0,+3.3e3 -2.50E+05,20.15 +3.5e+2,03.6 -4.60E-3,+4.75 -2,+1.0e2 -2.00E+5,20.10 30.5,03.25 -4.33E-3,+4.75') = polygon('-1.0,+10.5e2 -02.15E+50,2.5 -1.0,+3.3e3 -2.50E+05,20.15 +3.5e+2,03.6 -4.60E-3,+4.75 -2,+1.0e2 -2.00E+5,20.10 30.5,03.25 -4.33E-3,+4.75')),
+  'circle':(circle('0.1234,-1.00e-10 +10.5E-2') = circle('0.1234,-1.00e-10 +10.5E-2')),
+  'rectangle':(rectangle('0.1234,-1.00e-10 5.5487,0.48765') = rectangle('0.1234,-1.00e-10 5.5487,0.48765')),
+  'interval':(interval(datetime('-1987-11-19T02:43:57.938+08:00'),datetime('19991112T124935948-0700')) = interval(datetime('-1987-11-19T02:43:57.938+08:00'),datetime('19991112T124935948-0700'))),
+  'duration2':(duration('P3Y6M3DT9H5M2.348S') != duration('P4Y6M3DT9H5M2.348S')),
+  'year-month-duration2':("year-month-duration"('P3Y6M') != "year-month-duration"('P3Y7M')),
+  'day-time-duration2':("day-time-duration"('P3DT9H5M2.348S') != "day-time-duration"('P3DT1H5M2.348S')),
+  'point2':(point('47.44,80.65') != point('47.4444,80.65')),
+  'line2':(line('10.1234,11.1e-1 +10.2E-2,-11.22') != line('10.5678,11.1e-1 +10.2E-2,-11.22')),
+  'polygon2':(polygon('-1.0,+10.5e2 -02.15E+50,2.5 -1.0,+3.3e3 -2.50E+05,20.15 +3.5e+2,03.6 -4.60E-3,+4.75 -2,+1.0e2 -2.00E+5,20.10 30.5,03.25 -4.33E-3,+4.75') != polygon('-1.0,+10.5e2 -02.19E+50,2.5 -1.0,+3.3e3 -2.50E+05,20.15 +3.5e+2,03.6 -4.60E-3,+4.75 -2,+1.0e2 -2.00E+5,20.10 30.5,03.25 -4.33E-3,+4.75')),
+  'circle2':(circle('0.1234,-1.00e-10 +10.5E-2') != circle('0.5678,-1.00e-10 +10.5E-2')),
+  'rectangle2':(rectangle('0.1234,-1.00e-10 5.5487,0.48765') != rectangle('0.5678,-1.00e-10 5.5487,0.48765')),
+  'interval2':(interval(datetime('-1987-11-19T02:43:57.938+08:00'),datetime('19991112T124935948-0700')) != interval(datetime('-1983-11-19T02:43:57.938+08:00'),datetime('19991112T124935948-0700')))};
diff --git a/asterix-app/src/test/resources/runtimets/queries_sqlpp/comparison/issue363_inequality_interval/issue363_inequality_interval.3.query.sqlpp b/asterix-app/src/test/resources/runtimets/queries_sqlpp/comparison/issue363_inequality_interval/issue363_inequality_interval.3.query.sqlpp
index c72d273..f379db3 100644
--- a/asterix-app/src/test/resources/runtimets/queries_sqlpp/comparison/issue363_inequality_interval/issue363_inequality_interval.3.query.sqlpp
+++ b/asterix-app/src/test/resources/runtimets/queries_sqlpp/comparison/issue363_inequality_interval/issue363_inequality_interval.3.query.sqlpp
@@ -23,4 +23,7 @@
  * Issue        : 363
  */
 
-{'interval0':("interval-from-datetime"(datetime('-1987-11-19T02:43:57.938+08:00'),datetime('19991112T124935948-0700')) > "interval-from-datetime"(datetime('-1983-11-19T02:43:57.938+08:00'),datetime('19991112T124935948-0700'))),'interval1':("interval-from-datetime"(datetime('-1983-11-19T02:43:57.938+08:00'),datetime('19991112T124935948-0700')) < "interval-from-datetime"(datetime('-1987-11-19T02:43:57.938+08:00'),datetime('19991112T124935948-0700'))),'interval2':("interval-from-datetime"(datetime('-1987-11-19T02:43:57.938+08:00'),datetime('19991112T124935948-0700')) >= "interval-from-datetime"(datetime('-1983-11-19T02:43:57.938+08:00'),datetime('19991112T124935948-0700'))),'interval3':("interval-from-datetime"(datetime('-1983-11-19T02:43:57.938+08:00'),datetime('19991112T124935948-0700')) <= "interval-from-datetime"(datetime('-1987-11-19T02:43:57.938+08:00'),datetime('19991112T124935948-0700')))};
+{ 'interval0':(interval(datetime('-1987-11-19T02:43:57.938+08:00'),datetime('19991112T124935948-0700')) > interval(datetime('-1983-11-19T02:43:57.938+08:00'),datetime('19991112T124935948-0700'))),
+  'interval1':(interval(datetime('-1983-11-19T02:43:57.938+08:00'),datetime('19991112T124935948-0700')) < interval(datetime('-1987-11-19T02:43:57.938+08:00'),datetime('19991112T124935948-0700'))),
+  'interval2':(interval(datetime('-1987-11-19T02:43:57.938+08:00'),datetime('19991112T124935948-0700')) >= interval(datetime('-1983-11-19T02:43:57.938+08:00'),datetime('19991112T124935948-0700'))),
+  'interval3':(interval(datetime('-1983-11-19T02:43:57.938+08:00'),datetime('19991112T124935948-0700')) <= interval(datetime('-1987-11-19T02:43:57.938+08:00'),datetime('19991112T124935948-0700')))};
diff --git a/asterix-app/src/test/resources/runtimets/queries_sqlpp/constructor/interval/interval.3.query.sqlpp b/asterix-app/src/test/resources/runtimets/queries_sqlpp/constructor/interval/interval.3.query.sqlpp
index 83ffa9b..4ce9ff0 100644
--- a/asterix-app/src/test/resources/runtimets/queries_sqlpp/constructor/interval/interval.3.query.sqlpp
+++ b/asterix-app/src/test/resources/runtimets/queries_sqlpp/constructor/interval/interval.3.query.sqlpp
@@ -20,4 +20,30 @@
 use test;
 
 
-{'interval11':test."interval-from-date"(test.date('2010-10-30'),test.date('2012-10-21')),'interval12':test."interval-from-date"('2010-10-30',test.date('2012-10-21')),'interval13':test."interval-from-date"(test.date('2010-10-30'),'2012-10-21'),'interval14':test."interval-from-date"('2010-10-30','2012-10-21'),'interval15':test."interval-from-date"(null,'2012-10-21'),'interval16':test."interval-from-date"('2010-10-30',null),'interval21':test."interval-from-time"(test.time('03:04:05.678-11:00'),test.time('232425267+0200')),'interval22':test."interval-from-time"('03:04:05.678-11:00',test.time('232425267+0200')),'interval23':test."interval-from-time"(test.time('03:04:05.678-11:00'),'232425267+0200'),'interval24':test."interval-from-time"('03:04:05.678-11:00','232425267+0200'),'interval25':test."interval-from-time"(null,test.time('232425267+0200')),'interval26':test."interval-from-time"(test.time('03:04:05.678-11:00'),null),'interval31':test."interval-from-datetime"(test.datetime('
 -1987-11-19T02:43:57.938+08:00'),test.datetime('19991112T124935948-0700')),'interval32':test."interval-from-datetime"('-1987-11-19T02:43:57.938+08:00',test.datetime('19991112T124935948-0700')),'interval33':test."interval-from-datetime"(test.datetime('-1987-11-19T02:43:57.938+08:00'),'19991112T124935948-0700'),'interval34':test."interval-from-datetime"('-1987-11-19T02:43:57.938+08:00','19991112T124935948-0700'),'interval35':test."interval-from-datetime"(null,test.datetime('19991112T124935948-0700')),'interval36':test."interval-from-datetime"(test.datetime('-1987-11-19T02:43:57.938+08:00'),null),'interval41':test."interval-start-from-date"(test.date('0001-12-27'),test.duration('P3Y394DT48H398.483S')),'interval42':test."interval-start-from-date"('0001-12-27',test.duration('P3Y394DT48H398.483S')),'interval43':test."interval-start-from-date"(test.date('0001-12-27'),'P3Y394DT48H398.483S'),'interval44':test."interval-start-from-date"('0001-12-27','P3Y394DT48H398.483S'),'interval45'
 :test."interval-start-from-date"(null,test.duration('P3Y394DT48H398.483S')),'interval46':test."interval-start-from-date"(test.date('0001-12-27'),null),'interval51':test."interval-start-from-time"(test.time('20:03:20.948'),test.duration('P60DT48M389.938S')),'interval52':test."interval-start-from-time"('20:03:20.948',test.duration('P60DT48M389.938S')),'interval53':test."interval-start-from-time"(test.time('20:03:20.948'),'P60DT48M389.938S'),'interval54':test."interval-start-from-time"('20:03:20.948','P60DT48M389.938S'),'interval55':test."interval-start-from-time"(null,test.duration('P60DT48M389.938S')),'interval56':test."interval-start-from-time"(test.time('20:03:20.948'),null),'interval61':test."interval-start-from-datetime"(test.datetime('-2043-11-19T15:32:39.293'),test.duration('P439Y3M20DT20H39M58.949S')),'interval62':test."interval-start-from-datetime"('-2043-11-19T15:32:39.293',test.duration('P439Y3M20DT20H39M58.949S')),'interval63':test."interval-start-from-datetime"(te
 st.datetime('-2043-11-19T15:32:39.293'),'P439Y3M20DT20H39M58.949S'),'interval64':test."interval-start-from-datetime"('-2043-11-19T15:32:39.293','P439Y3M20DT20H39M58.949S'),'interval65':test."interval-start-from-datetime"(null,test.duration('P439Y3M20DT20H39M58.949S')),'interval66':test."interval-start-from-datetime"(test.datetime('-2043-11-19T15:32:39.293'),null)};
+{ 'interval41':test."interval-start-from-date"(test.date('0001-12-27'),test.duration('P3Y394DT48H398.483S')),
+  'interval42':test."interval-start-from-date"('0001-12-27',test.duration('P3Y394DT48H398.483S')),
+  'interval43':test."interval-start-from-date"(test.date('0001-12-27'),'P3Y394DT48H398.483S'),
+  'interval44':test."interval-start-from-date"('0001-12-27','P3Y394DT48H398.483S'),
+  'interval45':test."interval-start-from-date"(null,test.duration('P3Y394DT48H398.483S')),
+  'interval46':test."interval-start-from-date"(test.date('0001-12-27'),null),
+  'interval51':test."interval-start-from-time"(test.time('20:03:20.948'),test.duration('P60DT48M389.938S')),
+  'interval52':test."interval-start-from-time"('20:03:20.948',test.duration('P60DT48M389.938S')),
+  'interval53':test."interval-start-from-time"(test.time('20:03:20.948'),'P60DT48M389.938S'),
+  'interval54':test."interval-start-from-time"('20:03:20.948','P60DT48M389.938S'),
+  'interval55':test."interval-start-from-time"(null,test.duration('P60DT48M389.938S')),
+  'interval56':test."interval-start-from-time"(test.time('20:03:20.948'),null),
+  'interval61':test."interval-start-from-datetime"(test.datetime('-2043-11-19T15:32:39.293'),test.duration('P439Y3M20DT20H39M58.949S')),
+  'interval62':test."interval-start-from-datetime"('-2043-11-19T15:32:39.293',test.duration('P439Y3M20DT20H39M58.949S')),
+  'interval63':test."interval-start-from-datetime"(test.datetime('-2043-11-19T15:32:39.293'),'P439Y3M20DT20H39M58.949S'),
+  'interval64':test."interval-start-from-datetime"('-2043-11-19T15:32:39.293','P439Y3M20DT20H39M58.949S'),
+  'interval65':test."interval-start-from-datetime"(null,test.duration('P439Y3M20DT20H39M58.949S')),
+  'interval66':test."interval-start-from-datetime"(test.datetime('-2043-11-19T15:32:39.293'),null),
+  'interval71':test.interval(test.date('2010-10-30'),test.date('2012-10-21')),
+  'interval72':test.interval(null,test.date('2012-10-21')),
+  'interval73':test.interval(test.date('2010-10-30'),null),
+  'interval74':test.interval(test.time('03:04:05.678-11:00'),test.time('232425267+0200')),
+  'interval75':test.interval(null,test.time('232425267+0200')),
+  'interval76':test.interval(test.time('03:04:05.678-11:00'),null),
+  'interval77':test.interval(test.datetime('-1987-11-19T02:43:57.938+08:00'),test.datetime('19991112T124935948-0700')),
+  'interval78':test.interval(null,test.datetime('19991112T124935948-0700')),
+  'interval79':test.interval(test.datetime('-1987-11-19T02:43:57.938+08:00'),null)};
diff --git a/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/accessors_interval/accessors_interval.3.query.sqlpp b/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/accessors_interval/accessors_interval.3.query.sqlpp
index 4f30c74..5a8cc6a 100644
--- a/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/accessors_interval/accessors_interval.3.query.sqlpp
+++ b/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/accessors_interval/accessors_interval.3.query.sqlpp
@@ -20,4 +20,9 @@
 use test;
 
 
-{'start1':test."get-interval-start"(test."interval-from-date"(test.date('2010-10-30'),'2013-04-01')),'end1':test."get-interval-end"(test."interval-from-date"(test.date('2010-10-30'),'2013-04-01')),'start2':test."get-interval-start"(test."interval-from-time"('08:09:10.234Z',test.time('203040567+0800'))),'end2':test."get-interval-end"(test."interval-from-time"('08:09:10.234Z',test.time('203040567+0800'))),'start3':test."get-interval-start"(test."interval-from-datetime"('2009-09-01T00:00:00.000+08:00',test."datetime-from-date-time"(test.date('2013-04-04'),test.time('00:00:00.000+08:00')))),'end3':test."get-interval-end"(test."interval-from-datetime"('2009-09-01T00:00:00.000+08:00',test."datetime-from-date-time"(test.date('2013-04-04'),test.time('00:00:00.000+08:00'))))};
+{ 'start1':test."get-interval-start"(test.interval(test.date('2010-10-30'),test.date('2013-04-01'))),
+  'end1':test."get-interval-end"(test.interval(test.date('2010-10-30'),test.date('2013-04-01'))),
+  'start2':test."get-interval-start"(test.interval(test.time('08:09:10.234Z'),test.time('203040567+0800'))),
+  'end2':test."get-interval-end"(test.interval(test.time('08:09:10.234Z'),test.time('203040567+0800'))),
+  'start3':test."get-interval-start"(test.interval(test.datetime('2009-09-01T00:00:00.000+08:00'),test."datetime-from-date-time"(test.date('2013-04-04'),test.time('00:00:00.000+08:00')))),
+  'end3':test."get-interval-end"(test.interval(test.datetime('2009-09-01T00:00:00.000+08:00'),test."datetime-from-date-time"(test.date('2013-04-04'),test.time('00:00:00.000+08:00'))))};
diff --git a/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/duration_functions/duration_functions.3.query.sqlpp b/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/duration_functions/duration_functions.3.query.sqlpp
index 01a35b6..7f49e94 100644
--- a/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/duration_functions/duration_functions.3.query.sqlpp
+++ b/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/duration_functions/duration_functions.3.query.sqlpp
@@ -25,4 +25,6 @@
 use test;
 
 
-{'dr1':test."duration-from-interval"(test."interval-from-date"('2010-10-30','2010-12-21')),'dr2':test."duration-from-interval"(test."interval-from-datetime"('2012-06-26T01:01:01.111','2012-07-27T02:02:02.222')),'dr3':test."duration-from-interval"(test."interval-from-time"('12:32:38','20:29:20')),'dr4':test."duration-from-interval"(null)};
+{ 'dr1':test."duration-from-interval"(test.interval(date('2010-10-30'),date('2010-12-21'))),
+  'dr2':test."duration-from-interval"(test.interval(datetime('2012-06-26T01:01:01.111'),datetime('2012-07-27T02:02:02.222'))),
+  'dr3':test."duration-from-interval"(test.interval(time('12:32:38'),time('20:29:20'))),'dr4':test."duration-from-interval"(null)};
diff --git a/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/get_overlapping_interval/get_overlapping_interval.3.query.sqlpp b/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/get_overlapping_interval/get_overlapping_interval.3.query.sqlpp
index d27952e..940be8c 100644
--- a/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/get_overlapping_interval/get_overlapping_interval.3.query.sqlpp
+++ b/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/get_overlapping_interval/get_overlapping_interval.3.query.sqlpp
@@ -21,4 +21,9 @@
  * Expected result: success
  **/
 
-select element {'overlap1':"get-overlapping-interval"("interval-from-time"(time('11:23:39'),time('18:27:19')),"interval-from-time"(time('12:23:39'),time('23:18:00'))),'overlap2':"get-overlapping-interval"("interval-from-time"(time('12:23:39'),time('18:27:19')),"interval-from-time"(time('07:19:39'),time('09:18:00'))),'overlap3':"get-overlapping-interval"("interval-from-date"(date('1980-11-30'),date('1999-09-09')),"interval-from-date"(date('2013-01-01'),date('2014-01-01'))),'overlap4':"get-overlapping-interval"("interval-from-date"(date('1980-11-30'),date('2099-09-09')),"interval-from-date"(date('2013-01-01'),date('2014-01-01'))),'overlap5':"get-overlapping-interval"("interval-from-datetime"(datetime('1844-03-03T11:19:39'),datetime('2000-10-30T18:27:19')),"interval-from-datetime"(datetime('1989-03-04T12:23:39'),datetime('2009-10-10T23:18:00'))),'overlap6':"get-overlapping-interval"("interval-from-datetime"(datetime('1989-03-04T12:23:39'),datetime('2000-10-30T18:27:19')),"inter
 val-from-datetime"(datetime('1844-03-03T11:19:39'),datetime('1888-10-10T23:18:00')))};
+select element {'overlap1':"get-overlapping-interval"(interval(time('11:23:39'),time('18:27:19')),interval(time('12:23:39'),time('23:18:00'))),
+  'overlap2':"get-overlapping-interval"(interval(time('12:23:39'),time('18:27:19')),interval(time('07:19:39'),time('09:18:00'))),
+  'overlap3':"get-overlapping-interval"(interval(date('1980-11-30'),date('1999-09-09')),interval(date('2013-01-01'),date('2014-01-01'))),
+  'overlap4':"get-overlapping-interval"(interval(date('1980-11-30'),date('2099-09-09')),interval(date('2013-01-01'),date('2014-01-01'))),
+  'overlap5':"get-overlapping-interval"(interval(datetime('1844-03-03T11:19:39'),datetime('2000-10-30T18:27:19')),interval(datetime('1989-03-04T12:23:39'),datetime('2009-10-10T23:18:00'))),
+  'overlap6':"get-overlapping-interval"(interval(datetime('1989-03-04T12:23:39'),datetime('2000-10-30T18:27:19')),interval(datetime('1844-03-03T11:19:39'),datetime('1888-10-10T23:18:00')))};
diff --git a/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_functions/interval_functions.3.query.sqlpp b/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_functions/interval_functions.3.query.sqlpp
index bf5fd67..d7c278d 100644
--- a/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_functions/interval_functions.3.query.sqlpp
+++ b/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/interval_functions/interval_functions.3.query.sqlpp
@@ -19,25 +19,25 @@
 
 use test;
 
-let itv1 = "interval-from-date"('2010-10-30', '2010-12-21')
-,itv2 = "interval-from-date"('2011-10-30', '2012-10-21')
-, itv3 = "interval-from-date"('2010-12-21', '2013-01-01')
+let itv1 = interval(date('2010-10-30'), date('2010-12-21'))
+, itv2 = interval(date('2011-10-30'), date('2012-10-21'))
+, itv3 = interval(date('2010-12-21'), date('2013-01-01'))
 , blnBefore1 = "interval-before"(itv1, itv2)
 , blnAfter1 = "interval-after"(itv2, itv1)
 , blnBefore2 = "interval-before"(itv1, itv3)
 , blnAfter2 = "interval-after"(itv3, itv1)
 
-, itv4 = "interval-from-datetime"('2012-06-26T01:01:01.111', '2012-07-27T02:02:02.222')
-, itv5 = "interval-from-datetime"('20120727T020202222', '2013-08-08T03:03:03.333')
-, itv6 = "interval-from-datetime"('19000707T020202222', '2013-08-07T03:03:03.333')
+, itv4 = interval(datetime('2012-06-26T01:01:01.111'), datetime('2012-07-27T02:02:02.222'))
+, itv5 = interval(datetime('20120727T020202222'), datetime('2013-08-08T03:03:03.333'))
+, itv6 = interval(datetime('19000707T020202222'), datetime('2013-08-07T03:03:03.333'))
 , blnMeet1 = "interval-meets"(itv4, itv5)
 , blnMetBy1 = "interval-met-by"(itv5, itv4)
 , blnMeet2 = "interval-meets"(itv6, itv4)
 , blnMetBy2 = "interval-met-by"(itv6, itv4)
 
-, itv7 = "interval-from-time"('12:32:38', '20:29:20')
-, itv8 = "interval-from-time"('17:48:19', '22:19:49')
-, itv9 = "interval-from-time"('01:32:49', '17:48:19')
+, itv7 = interval(time('12:32:38'), time('20:29:20'))
+, itv8 = interval(time('17:48:19'), time('22:19:49'))
+, itv9 = interval(time('01:32:49'), time('17:48:19'))
 , blnOverlaps1 = "interval-overlaps"(itv7, itv8)
 , blnOverlapped1 = "interval-overlapped-by"(itv8, itv7)
 , blnOverlaps2 = "interval-overlaps"(itv9, itv8)
@@ -45,21 +45,21 @@
 , blnOverlap1 = "interval-overlapping"(itv9, itv7)
 , blnOverlap2 = "interval-overlapping"(itv9, itv8)
 
-, itv10 = "interval-from-date"('2010-10-30', '2010-11-30')
+, itv10 = interval(date('2010-10-30'), date('2010-11-30'))
 , blnStarts1 = "interval-starts"(itv10, itv1)
 , blnStarts2 = "interval-starts"(itv10, itv2)
 , blnStartedBy1 = "interval-started-by"(itv1, itv10)
 , blnStartedBy2 = "interval-started-by"(itv10, itv2)
 
-, itv10 = "interval-from-datetime"('19000707T020202222', '2013-08-07T03:03:03.333')
-, itv11 = "interval-from-datetime"('19990707T020202222', '2013-08-07T03:03:03.333')
-, itv12 = "interval-from-datetime"('-19990707T020202222', '2013-08-07T03:03:03.333')
+, itv10 = interval(datetime('19000707T020202222'), datetime('2013-08-07T03:03:03.333'))
+, itv11 = interval(datetime('19990707T020202222'), datetime('2013-08-07T03:03:03.333'))
+, itv12 = interval(datetime('-19990707T020202222'), datetime('2013-08-07T03:03:03.333'))
 , blnCovers1 = "interval-covers"(itv10, itv11)
 , blnCovers2 = "interval-covers"(itv10, itv12)
 , blnCoveredBy1 = "interval-covered-by"(itv11, itv10)
 , blnCoveredBy2 = "interval-covered-by"(itv12, itv10)
 
-, itv11 = "interval-from-time"('19:00:00.009', '20:29:20.000')
+, itv11 = interval(time('19:00:00.009'), time('20:29:20.000'))
 , blnEnds1 = "interval-ends"(itv11, itv7)
 , blnEnds2 = "interval-ends"(itv11, itv8)
 , blnEndedBy1 = "interval-ended-by"(itv7, itv11)
diff --git a/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/overlap_bins/overlap_bins.3.query.sqlpp b/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/overlap_bins/overlap_bins.3.query.sqlpp
index fa484e0..8f4b04b 100644
--- a/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/overlap_bins/overlap_bins.3.query.sqlpp
+++ b/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/overlap_bins/overlap_bins.3.query.sqlpp
@@ -21,4 +21,7 @@
  * Expected result: success
  **/
 
-{'timebins':"overlap-bins"("interval-from-time"(time('17:23:37'),time('18:30:21')),time('00:00:00'),"day-time-duration"('PT30M')),'datebins':"overlap-bins"("interval-from-date"(date('1984-03-17'),date('2013-08-22')),date('1990-01-01'),"year-month-duration"('P20Y')),'datetimebins':"overlap-bins"("interval-from-datetime"(datetime('1800-01-01T23:59:48.938'),datetime('2015-07-26T13:28:30.218')),datetime('1900-01-01T00:00:00.000'),"year-month-duration"('P100Y'))};
+{ 'timebins':"overlap-bins"(interval(time('17:23:37'),time('18:30:21')),time('00:00:00'),"day-time-duration"('PT30M')),
+  'datebins':"overlap-bins"(interval(date('1984-03-17'),date('2013-08-22')),date('1990-01-01'),"year-month-duration"('P20Y')),
+  'datetimebins':"overlap-bins"(interval(datetime('1800-01-01T23:59:48.938'),datetime('2015-07-26T13:28:30.218')),datetime('1900-01-01T00:00:00.000'),
+  "year-month-duration"('P100Y'))};
diff --git a/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/overlap_bins_gby_3/overlap_bins_gby_3.3.query.sqlpp b/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/overlap_bins_gby_3/overlap_bins_gby_3.3.query.sqlpp
index cfce69e..c996e7d 100644
--- a/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/overlap_bins_gby_3/overlap_bins_gby_3.3.query.sqlpp
+++ b/asterix-app/src/test/resources/runtimets/queries_sqlpp/temporal/overlap_bins_gby_3/overlap_bins_gby_3.3.query.sqlpp
@@ -27,7 +27,7 @@
         group by i.app as subgid
         order by subgid,multitask.count(i)
     )}
-from  multitask."overlap-bins"(multitask."interval-from-time"(multitask.min((
+from  multitask."overlap-bins"(multitask.interval(multitask.min((
     select element i.time
     from  logs as i
 )),multitask.max((
diff --git a/asterix-app/src/test/resources/runtimets/results/comparison/interval_order/interval_order.3.adm b/asterix-app/src/test/resources/runtimets/results/comparison/interval_order/interval_order.3.adm
index 35b6077..c55c2fc 100644
--- a/asterix-app/src/test/resources/runtimets/results/comparison/interval_order/interval_order.3.adm
+++ b/asterix-app/src/test/resources/runtimets/results/comparison/interval_order/interval_order.3.adm
@@ -1,7 +1,7 @@
-interval-date("2001-01-01, 2010-01-01")
-interval-date("2002-01-01, 2003-01-01")
-interval-date("2002-01-01, 2010-01-01")
-interval-date("2003-01-01, 2008-01-01")
-interval-date("2003-01-01, 2008-01-01")
-interval-date("2004-01-01, 2009-01-01")
-interval-date("2006-01-01, 2010-01-01")
\ No newline at end of file
+interval(date("2001-01-01"), date("2010-01-01"))
+interval(date("2002-01-01"), date("2003-01-01"))
+interval(date("2002-01-01"), date("2010-01-01"))
+interval(date("2003-01-01"), date("2008-01-01"))
+interval(date("2003-01-01"), date("2008-01-01"))
+interval(date("2004-01-01"), date("2009-01-01"))
+interval(date("2006-01-01"), date("2010-01-01"))
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/results/comparison/interval_order/interval_order.4.adm b/asterix-app/src/test/resources/runtimets/results/comparison/interval_order/interval_order.4.adm
index b8b3d7a..0ce3141 100644
--- a/asterix-app/src/test/resources/runtimets/results/comparison/interval_order/interval_order.4.adm
+++ b/asterix-app/src/test/resources/runtimets/results/comparison/interval_order/interval_order.4.adm
@@ -1,7 +1,7 @@
-interval-date("2006-01-01, 2010-01-01")
-interval-date("2002-01-01, 2010-01-01")
-interval-date("2001-01-01, 2010-01-01")
-interval-date("2004-01-01, 2009-01-01")
-interval-date("2003-01-01, 2008-01-01")
-interval-date("2003-01-01, 2008-01-01")
-interval-date("2002-01-01, 2003-01-01")
\ No newline at end of file
+interval(date("2006-01-01"), date("2010-01-01"))
+interval(date("2002-01-01"), date("2010-01-01"))
+interval(date("2001-01-01"), date("2010-01-01"))
+interval(date("2004-01-01"), date("2009-01-01"))
+interval(date("2003-01-01"), date("2008-01-01"))
+interval(date("2003-01-01"), date("2008-01-01"))
+interval(date("2002-01-01"), date("2003-01-01"))
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/results/constructor/interval/interval.1.adm b/asterix-app/src/test/resources/runtimets/results/constructor/interval/interval.1.adm
index d6c9c9b..bc00add 100644
--- a/asterix-app/src/test/resources/runtimets/results/constructor/interval/interval.1.adm
+++ b/asterix-app/src/test/resources/runtimets/results/constructor/interval/interval.1.adm
@@ -1 +1 @@
-{ "interval11": interval-date("2010-10-30, 2012-10-21"), "interval12": interval-date("2010-10-30, 2012-10-21"), "interval13": interval-date("2010-10-30, 2012-10-21"), "interval14": interval-date("2010-10-30, 2012-10-21"), "interval15": null, "interval16": null, "interval21": interval-time("14:04:05.678Z, 21:24:25.267Z"), "interval22": interval-time("14:04:05.678Z, 21:24:25.267Z"), "interval23": interval-time("14:04:05.678Z, 21:24:25.267Z"), "interval24": interval-time("14:04:05.678Z, 21:24:25.267Z"), "interval25": null, "interval26": null, "interval31": interval-datetime("-1987-11-18T18:43:57.938Z, 1999-11-12T19:49:35.948Z"), "interval32": interval-datetime("-1987-11-18T18:43:57.938Z, 1999-11-12T19:49:35.948Z"), "interval33": interval-datetime("-1987-11-18T18:43:57.938Z, 1999-11-12T19:49:35.948Z"), "interval34": interval-datetime("-1987-11-18T18:43:57.938Z, 1999-11-12T19:49:35.948Z"), "interval35": null, "interval36": null, "interval41": interval-date("0001-12-27, 0006-01-27
 "), "interval42": interval-date("0001-12-27, 0006-01-27"), "interval43": interval-date("0001-12-27, 0006-01-27"), "interval44": interval-date("0001-12-27, 0006-01-27"), "interval45": null, "interval46": null, "interval51": interval-time("20:03:20.948Z, 20:57:50.886Z"), "interval52": interval-time("20:03:20.948Z, 20:57:50.886Z"), "interval53": interval-time("20:03:20.948Z, 20:57:50.886Z"), "interval54": interval-time("20:03:20.948Z, 20:57:50.886Z"), "interval55": null, "interval56": null, "interval61": interval-datetime("-2043-11-19T15:32:39.293Z, -1603-03-12T12:12:38.242Z"), "interval62": interval-datetime("-2043-11-19T15:32:39.293Z, -1603-03-12T12:12:38.242Z"), "interval63": interval-datetime("-2043-11-19T15:32:39.293Z, -1603-03-12T12:12:38.242Z"), "interval64": interval-datetime("-2043-11-19T15:32:39.293Z, -1603-03-12T12:12:38.242Z"), "interval65": null, "interval66": null }
+{ "interval41": interval(date("0001-12-27"), date("0006-01-27")), "interval42": interval(date("0001-12-27"), date("0006-01-27")), "interval43": interval(date("0001-12-27"), date("0006-01-27")), "interval44": interval(date("0001-12-27"), date("0006-01-27")), "interval45": null, "interval46": null, "interval51": interval(time("20:03:20.948Z"), time("20:57:50.886Z")), "interval52": interval(time("20:03:20.948Z"), time("20:57:50.886Z")), "interval53": interval(time("20:03:20.948Z"), time("20:57:50.886Z")), "interval54": interval(time("20:03:20.948Z"), time("20:57:50.886Z")), "interval55": null, "interval56": null, "interval61": interval(datetime("-2043-11-19T15:32:39.293Z"), datetime("-1603-03-12T12:12:38.242Z")), "interval62": interval(datetime("-2043-11-19T15:32:39.293Z"), datetime("-1603-03-12T12:12:38.242Z")), "interval63": interval(datetime("-2043-11-19T15:32:39.293Z"), datetime("-1603-03-12T12:12:38.242Z")), "interval64": interval(datetime("-2043-11-19T15:32:39.293Z"), dat
 etime("-1603-03-12T12:12:38.242Z")), "interval65": null, "interval66": null, "interval71": interval(date("2010-10-30"), date("2012-10-21")), "interval72": null, "interval73": null, "interval74": interval(time("14:04:05.678Z"), time("21:24:25.267Z")), "interval75": null, "interval76": null, "interval77": interval(datetime("-1987-11-18T18:43:57.938Z"), datetime("1999-11-12T19:49:35.948Z")), "interval78": null, "interval79": null }
diff --git a/asterix-app/src/test/resources/runtimets/results/temporal/get_overlapping_interval/get_overlapping_interval.1.adm b/asterix-app/src/test/resources/runtimets/results/temporal/get_overlapping_interval/get_overlapping_interval.1.adm
index 4c3ce59..a6a2c22 100644
--- a/asterix-app/src/test/resources/runtimets/results/temporal/get_overlapping_interval/get_overlapping_interval.1.adm
+++ b/asterix-app/src/test/resources/runtimets/results/temporal/get_overlapping_interval/get_overlapping_interval.1.adm
@@ -1 +1 @@
-{ "overlap1": interval-time("12:23:39.000Z, 18:27:19.000Z"), "overlap2": null, "overlap3": null, "overlap4": interval-date("2013-01-01, 2014-01-01"), "overlap5": interval-datetime("1989-03-04T12:23:39.000Z, 2000-10-30T18:27:19.000Z"), "overlap6": null }
+{ "overlap1": interval(time("12:23:39.000Z"), time("18:27:19.000Z")), "overlap2": null, "overlap3": null, "overlap4": interval(date("2013-01-01"), date("2014-01-01")), "overlap5": interval(datetime("1989-03-04T12:23:39.000Z"), datetime("2000-10-30T18:27:19.000Z")), "overlap6": null }
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/results/temporal/insert_from_ext_ds/insert_from_ext_ds.1.adm b/asterix-app/src/test/resources/runtimets/results/temporal/insert_from_ext_ds/insert_from_ext_ds.1.adm
index 61de6de..5eb8905 100644
--- a/asterix-app/src/test/resources/runtimets/results/temporal/insert_from_ext_ds/insert_from_ext_ds.1.adm
+++ b/asterix-app/src/test/resources/runtimets/results/temporal/insert_from_ext_ds/insert_from_ext_ds.1.adm
@@ -1,4 +1,4 @@
-{ "date": date("-2012-12-12"), "time": time("23:49:12.390Z"), "datetime": datetime("2012-12-12T00:00:00.001Z"), "duration": duration("P20Y19DT4H14M23.34S"), "interval": interval-datetime("2012-12-12T00:00:00.001Z, 2013-08-10T22:10:15.398Z"), "ymduration": null, "dtduration": null }
-{ "date": null, "time": time("04:12:12.219Z"), "datetime": datetime("1920-12-21T11:29:18.478Z"), "duration": null, "interval": interval-time("04:29:30.000Z, 07:59:59.999Z"), "ymduration": null, "dtduration": null }
-{ "date": null, "time": null, "datetime": datetime("-0290-03-22T17:59:48.999Z"), "duration": duration("-P27Y148D"), "interval": interval-date("-2012-03-17, 2013-04-01"), "ymduration": null, "dtduration": null }
+{ "date": date("-2012-12-12"), "time": time("23:49:12.390Z"), "datetime": datetime("2012-12-12T00:00:00.001Z"), "duration": duration("P20Y19DT4H14M23.34S"), "interval": interval(datetime("2012-12-12T00:00:00.001Z"), datetime("2013-08-10T22:10:15.398Z")), "ymduration": null, "dtduration": null }
+{ "date": null, "time": time("04:12:12.219Z"), "datetime": datetime("1920-12-21T11:29:18.478Z"), "duration": null, "interval": interval(time("04:29:30.000Z"), time("07:59:59.999Z")), "ymduration": null, "dtduration": null }
+{ "date": null, "time": null, "datetime": datetime("-0290-03-22T17:59:48.999Z"), "duration": duration("-P27Y148D"), "interval": interval(date("-2012-03-17"), date("2013-04-01")), "ymduration": null, "dtduration": null }
 { "date": null, "time": null, "datetime": null, "duration": null, "interval": null, "ymduration": year-month-duration("P31Y2M"), "dtduration": day-time-duration("-P148D") }
diff --git a/asterix-app/src/test/resources/runtimets/results/temporal/insert_from_ext_ds_2/insert_from_ext_ds_2.1.adm b/asterix-app/src/test/resources/runtimets/results/temporal/insert_from_ext_ds_2/insert_from_ext_ds_2.1.adm
index 2c485e2..2b03194 100644
--- a/asterix-app/src/test/resources/runtimets/results/temporal/insert_from_ext_ds_2/insert_from_ext_ds_2.1.adm
+++ b/asterix-app/src/test/resources/runtimets/results/temporal/insert_from_ext_ds_2/insert_from_ext_ds_2.1.adm
@@ -1,3 +1,3 @@
-{ "date": date("-9971-09-24"), "time": time("11:38:17.154Z"), "datetime": datetime("1259-11-13T09:49:11.852Z"), "duration": duration("P473653Y9M4566143DT10H20M53.61S"), "year-month-duration": year-month-duration("P148233Y10M"), "day-time-duration": day-time-duration("-P7236357DT2H56M56.164S"), "date-interval": interval-date("-0255-09-06, 4925-05-03"), "time-interval": interval-time("12:10:45.169Z, 15:37:48.736Z"), "datetime-interval": interval-datetime("0534-12-08T08:20:31.487Z, 6778-02-16T22:40:21.653Z") }
-{ "date": date("4619-11-23"), "time": time("14:29:36.786Z"), "datetime": datetime("2749-01-27T17:27:30.020Z"), "duration": duration("-P474133Y7M854630DT4H40M6.45S"), "year-month-duration": year-month-duration("P193989Y3M"), "day-time-duration": day-time-duration("P4477686DT4H49M31.87S"), "date-interval": interval-date("-9537-08-04, 9656-06-03"), "time-interval": interval-time("12:04:45.689Z, 12:41:59.002Z"), "datetime-interval": interval-datetime("-2640-10-11T17:32:15.675Z, 4104-02-01T05:59:11.902Z") }
-{ "date": date("7986-11-25"), "time": time("12:49:39.736Z"), "datetime": datetime("-8337-01-30T15:23:07.598Z"), "duration": duration("-P184484Y7M2241423DT10H42M49.500S"), "year-month-duration": year-month-duration("-P546031Y3M"), "day-time-duration": day-time-duration("P2623386DT10H32M31.983S"), "date-interval": interval-date("-4514-05-24, 3337-08-26"), "time-interval": interval-time("04:16:42.321Z, 12:22:56.816Z"), "datetime-interval": interval-datetime("2129-12-12T13:18:35.758Z, 8647-07-01T13:10:19.691Z") }
+{ "date": date("-9971-09-24"), "time": time("11:38:17.154Z"), "datetime": datetime("1259-11-13T09:49:11.852Z"), "duration": duration("P473653Y9M4566143DT10H20M53.61S"), "year-month-duration": year-month-duration("P148233Y10M"), "day-time-duration": day-time-duration("-P7236357DT2H56M56.164S"), "date-interval": interval(date("-0255-09-06"), date("4925-05-03")), "time-interval": interval(time("12:10:45.169Z"), time("15:37:48.736Z")), "datetime-interval": interval(datetime("0534-12-08T08:20:31.487Z"), datetime("6778-02-16T22:40:21.653Z")) }
+{ "date": date("4619-11-23"), "time": time("14:29:36.786Z"), "datetime": datetime("2749-01-27T17:27:30.020Z"), "duration": duration("-P474133Y7M854630DT4H40M6.45S"), "year-month-duration": year-month-duration("P193989Y3M"), "day-time-duration": day-time-duration("P4477686DT4H49M31.87S"), "date-interval": interval(date("-9537-08-04"), date("9656-06-03")), "time-interval": interval(time("12:04:45.689Z"), time("12:41:59.002Z")), "datetime-interval": interval(datetime("-2640-10-11T17:32:15.675Z"), datetime("4104-02-01T05:59:11.902Z")) }
+{ "date": date("7986-11-25"), "time": time("12:49:39.736Z"), "datetime": datetime("-8337-01-30T15:23:07.598Z"), "duration": duration("-P184484Y7M2241423DT10H42M49.500S"), "year-month-duration": year-month-duration("-P546031Y3M"), "day-time-duration": day-time-duration("P2623386DT10H32M31.983S"), "date-interval": interval(date("-4514-05-24"), date("3337-08-26")), "time-interval": interval(time("04:16:42.321Z"), time("12:22:56.816Z")), "datetime-interval": interval(datetime("2129-12-12T13:18:35.758Z"), datetime("8647-07-01T13:10:19.691Z")) }
diff --git a/asterix-app/src/test/resources/runtimets/results/temporal/interval_bin/interval_bin.1.adm b/asterix-app/src/test/resources/runtimets/results/temporal/interval_bin/interval_bin.1.adm
index 46fbfa5..8c95d98 100644
--- a/asterix-app/src/test/resources/runtimets/results/temporal/interval_bin/interval_bin.1.adm
+++ b/asterix-app/src/test/resources/runtimets/results/temporal/interval_bin/interval_bin.1.adm
@@ -1 +1 @@
-{ "bin1": interval-date("2010-01-01, 2011-01-01"), "bin2": interval-date("2010-01-01, 2011-01-01"), "bin3": interval-datetime("-1987-07-01T00:00:00.000Z, -1986-01-01T00:00:00.000Z"), "bin4": interval-datetime("-1987-11-19T12:00:00.000Z, -1987-11-20T00:00:00.000Z"), "bin5": interval-time("04:00:00.000Z, 06:00:00.000Z"), "bin6": null, "bin7": null, "bin8": null }
+{ "bin1": interval(date("2010-01-01"), date("2011-01-01")), "bin2": interval(date("2010-01-01"), date("2011-01-01")), "bin3": interval(datetime("-1987-07-01T00:00:00.000Z"), datetime("-1986-01-01T00:00:00.000Z")), "bin4": interval(datetime("-1987-11-19T12:00:00.000Z"), datetime("-1987-11-20T00:00:00.000Z")), "bin5": interval(time("04:00:00.000Z"), time("06:00:00.000Z")), "bin6": null, "bin7": null, "bin8": null }
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/results/temporal/interval_bin_gby_0/interval_bin_gby_0.1.adm b/asterix-app/src/test/resources/runtimets/results/temporal/interval_bin_gby_0/interval_bin_gby_0.1.adm
index 7902191..aa0f939 100644
--- a/asterix-app/src/test/resources/runtimets/results/temporal/interval_bin_gby_0/interval_bin_gby_0.1.adm
+++ b/asterix-app/src/test/resources/runtimets/results/temporal/interval_bin_gby_0/interval_bin_gby_0.1.adm
@@ -1,4 +1,4 @@
-{ "tbin": interval-datetime("-1990-01-01T00:00:00.000Z, -1970-01-01T00:00:00.000Z"), "count": 4 }
-{ "tbin": interval-datetime("-0990-01-01T00:00:00.000Z, -0970-01-01T00:00:00.000Z"), "count": 1 }
-{ "tbin": interval-datetime("1970-01-01T00:00:00.000Z, 1990-01-01T00:00:00.000Z"), "count": 5 }
-{ "tbin": interval-datetime("2010-01-01T00:00:00.000Z, 2030-01-01T00:00:00.000Z"), "count": 2 }
+{ "tbin": interval(datetime("-1990-01-01T00:00:00.000Z"), datetime("-1970-01-01T00:00:00.000Z")), "count": 4 }
+{ "tbin": interval(datetime("-0990-01-01T00:00:00.000Z"), datetime("-0970-01-01T00:00:00.000Z")), "count": 1 }
+{ "tbin": interval(datetime("1970-01-01T00:00:00.000Z"), datetime("1990-01-01T00:00:00.000Z")), "count": 5 }
+{ "tbin": interval(datetime("2010-01-01T00:00:00.000Z"), datetime("2030-01-01T00:00:00.000Z")), "count": 2 }
diff --git a/asterix-app/src/test/resources/runtimets/results/temporal/interval_bin_gby_1/interval_bin_gby_1.1.adm b/asterix-app/src/test/resources/runtimets/results/temporal/interval_bin_gby_1/interval_bin_gby_1.1.adm
index 3ff3ce0..37fb65f 100644
--- a/asterix-app/src/test/resources/runtimets/results/temporal/interval_bin_gby_1/interval_bin_gby_1.1.adm
+++ b/asterix-app/src/test/resources/runtimets/results/temporal/interval_bin_gby_1/interval_bin_gby_1.1.adm
@@ -1,8 +1,8 @@
-{ "tbin": interval-time("00:20:00.000Z, 00:30:00.000Z"), "count": 1 }
-{ "tbin": interval-time("09:30:00.000Z, 09:40:00.000Z"), "count": 1 }
-{ "tbin": interval-time("17:20:00.000Z, 17:30:00.000Z"), "count": 1 }
-{ "tbin": interval-time("18:00:00.000Z, 18:10:00.000Z"), "count": 1 }
-{ "tbin": interval-time("23:20:00.000Z, 23:30:00.000Z"), "count": 1 }
-{ "tbin": interval-time("23:30:00.000Z, 23:40:00.000Z"), "count": 1 }
-{ "tbin": interval-time("23:40:00.000Z, 23:50:00.000Z"), "count": 5 }
-{ "tbin": interval-time("23:50:00.000Z, 00:00:00.000Z"), "count": 1 }
+{ "tbin": interval(time("00:20:00.000Z"), time("00:30:00.000Z")), "count": 1 }
+{ "tbin": interval(time("09:30:00.000Z"), time("09:40:00.000Z")), "count": 1 }
+{ "tbin": interval(time("17:20:00.000Z"), time("17:30:00.000Z")), "count": 1 }
+{ "tbin": interval(time("18:00:00.000Z"), time("18:10:00.000Z")), "count": 1 }
+{ "tbin": interval(time("23:20:00.000Z"), time("23:30:00.000Z")), "count": 1 }
+{ "tbin": interval(time("23:30:00.000Z"), time("23:40:00.000Z")), "count": 1 }
+{ "tbin": interval(time("23:40:00.000Z"), time("23:50:00.000Z")), "count": 5 }
+{ "tbin": interval(time("23:50:00.000Z"), time("00:00:00.000Z")), "count": 1 }
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/results/temporal/overlap_bins/overlap_bins.1.adm b/asterix-app/src/test/resources/runtimets/results/temporal/overlap_bins/overlap_bins.1.adm
index 88f2be1..a17ee5e 100644
--- a/asterix-app/src/test/resources/runtimets/results/temporal/overlap_bins/overlap_bins.1.adm
+++ b/asterix-app/src/test/resources/runtimets/results/temporal/overlap_bins/overlap_bins.1.adm
@@ -1 +1 @@
-{ "timebins": [ interval-time("17:00:00.000Z, 17:30:00.000Z"), interval-time("17:30:00.000Z, 18:00:00.000Z"), interval-time("18:00:00.000Z, 18:30:00.000Z"), interval-time("18:30:00.000Z, 19:00:00.000Z") ], "datebins": [ interval-date("1970-01-01, 1990-01-01"), interval-date("1990-01-01, 2010-01-01"), interval-date("2010-01-01, 2030-01-01") ], "datetimebins": [ interval-datetime("1800-01-01T00:00:00.000Z, 1900-01-01T00:00:00.000Z"), interval-datetime("1900-01-01T00:00:00.000Z, 2000-01-01T00:00:00.000Z"), interval-datetime("2000-01-01T00:00:00.000Z, 2100-01-01T00:00:00.000Z") ] }
+{ "timebins": [ interval(time("17:00:00.000Z"), time("17:30:00.000Z")), interval(time("17:30:00.000Z"), time("18:00:00.000Z")), interval(time("18:00:00.000Z"), time("18:30:00.000Z")), interval(time("18:30:00.000Z"), time("19:00:00.000Z")) ], "datebins": [ interval(date("1970-01-01"), date("1990-01-01")), interval(date("1990-01-01"), date("2010-01-01")), interval(date("2010-01-01"), date("2030-01-01")) ], "datetimebins": [ interval(datetime("1800-01-01T00:00:00.000Z"), datetime("1900-01-01T00:00:00.000Z")), interval(datetime("1900-01-01T00:00:00.000Z"), datetime("2000-01-01T00:00:00.000Z")), interval(datetime("2000-01-01T00:00:00.000Z"), datetime("2100-01-01T00:00:00.000Z")) ] }
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/results/temporal/overlap_bins_gby_0/overlap_bins_gby_0.1.adm b/asterix-app/src/test/resources/runtimets/results/temporal/overlap_bins_gby_0/overlap_bins_gby_0.1.adm
index 5402cb5..551e054 100644
--- a/asterix-app/src/test/resources/runtimets/results/temporal/overlap_bins_gby_0/overlap_bins_gby_0.1.adm
+++ b/asterix-app/src/test/resources/runtimets/results/temporal/overlap_bins_gby_0/overlap_bins_gby_0.1.adm
@@ -1,23 +1,23 @@
-{ "tbin": interval-time("00:00:00.000Z, 01:30:00.000Z"), "interval": interval-time("00:27:13.432Z, 01:27:13.432Z"), "overlap": interval-time("00:27:13.432Z, 01:27:13.432Z") }
-{ "tbin": interval-time("07:30:00.000Z, 09:00:00.000Z"), "interval": interval-time("07:49:23.938Z, 10:49:23.938Z"), "overlap": interval-time("07:49:23.938Z, 09:00:00.000Z") }
-{ "tbin": interval-time("09:00:00.000Z, 10:30:00.000Z"), "interval": interval-time("07:49:23.938Z, 10:49:23.938Z"), "overlap": interval-time("09:00:00.000Z, 10:30:00.000Z") }
-{ "tbin": interval-time("09:00:00.000Z, 10:30:00.000Z"), "interval": interval-time("09:35:28.039Z, 20:25:28.039Z"), "overlap": interval-time("09:35:28.039Z, 10:30:00.000Z") }
-{ "tbin": interval-time("10:30:00.000Z, 12:00:00.000Z"), "interval": interval-time("07:49:23.938Z, 10:49:23.938Z"), "overlap": interval-time("10:30:00.000Z, 10:49:23.938Z") }
-{ "tbin": interval-time("10:30:00.000Z, 12:00:00.000Z"), "interval": interval-time("09:35:28.039Z, 20:25:28.039Z"), "overlap": interval-time("10:30:00.000Z, 12:00:00.000Z") }
-{ "tbin": interval-time("12:00:00.000Z, 13:30:00.000Z"), "interval": interval-time("09:35:28.039Z, 20:25:28.039Z"), "overlap": interval-time("12:00:00.000Z, 13:30:00.000Z") }
-{ "tbin": interval-time("12:00:00.000Z, 13:30:00.000Z"), "interval": interval-time("12:49:23.938Z, 15:49:23.938Z"), "overlap": interval-time("12:49:23.938Z, 13:30:00.000Z") }
-{ "tbin": interval-time("13:30:00.000Z, 15:00:00.000Z"), "interval": interval-time("09:35:28.039Z, 20:25:28.039Z"), "overlap": interval-time("13:30:00.000Z, 15:00:00.000Z") }
-{ "tbin": interval-time("13:30:00.000Z, 15:00:00.000Z"), "interval": interval-time("12:49:23.938Z, 15:49:23.938Z"), "overlap": interval-time("13:30:00.000Z, 15:00:00.000Z") }
-{ "tbin": interval-time("15:00:00.000Z, 16:30:00.000Z"), "interval": interval-time("09:35:28.039Z, 20:25:28.039Z"), "overlap": interval-time("15:00:00.000Z, 16:30:00.000Z") }
-{ "tbin": interval-time("15:00:00.000Z, 16:30:00.000Z"), "interval": interval-time("12:49:23.938Z, 15:49:23.938Z"), "overlap": interval-time("15:00:00.000Z, 15:49:23.938Z") }
-{ "tbin": interval-time("16:30:00.000Z, 18:00:00.000Z"), "interval": interval-time("09:35:28.039Z, 20:25:28.039Z"), "overlap": interval-time("16:30:00.000Z, 18:00:00.000Z") }
-{ "tbin": interval-time("16:30:00.000Z, 18:00:00.000Z"), "interval": interval-time("17:28:13.900Z, 17:28:32.900Z"), "overlap": interval-time("17:28:13.900Z, 17:28:32.900Z") }
-{ "tbin": interval-time("18:00:00.000Z, 19:30:00.000Z"), "interval": interval-time("09:35:28.039Z, 20:25:28.039Z"), "overlap": interval-time("18:00:00.000Z, 19:30:00.000Z") }
-{ "tbin": interval-time("18:00:00.000Z, 19:30:00.000Z"), "interval": interval-time("18:00:00.000Z, 20:00:00.000Z"), "overlap": interval-time("18:00:00.000Z, 19:30:00.000Z") }
-{ "tbin": interval-time("19:30:00.000Z, 21:00:00.000Z"), "interval": interval-time("09:35:28.039Z, 20:25:28.039Z"), "overlap": interval-time("19:30:00.000Z, 20:25:28.039Z") }
-{ "tbin": interval-time("19:30:00.000Z, 21:00:00.000Z"), "interval": interval-time("18:00:00.000Z, 20:00:00.000Z"), "overlap": interval-time("19:30:00.000Z, 20:00:00.000Z") }
-{ "tbin": interval-time("22:30:00.000Z, 00:00:00.000Z"), "interval": interval-time("23:22:38.000Z, 23:42:38.000Z"), "overlap": interval-time("23:22:38.000Z, 23:42:38.000Z") }
-{ "tbin": interval-time("22:30:00.000Z, 00:00:00.000Z"), "interval": interval-time("23:30:00.000Z, 23:32:00.000Z"), "overlap": interval-time("23:30:00.000Z, 23:32:00.000Z") }
-{ "tbin": interval-time("22:30:00.000Z, 00:00:00.000Z"), "interval": interval-time("23:49:23.938Z, 23:54:23.938Z"), "overlap": interval-time("23:49:23.938Z, 23:54:23.938Z") }
-{ "tbin": interval-time("22:30:00.000Z, 00:00:00.000Z"), "interval": interval-time("23:49:33.938Z, 23:50:03.938Z"), "overlap": interval-time("23:49:33.938Z, 23:50:03.938Z") }
-{ "tbin": interval-time("22:30:00.000Z, 00:00:00.000Z"), "interval": interval-time("23:58:17.038Z, 23:58:56.420Z"), "overlap": interval-time("23:58:17.038Z, 23:58:56.420Z") }
+{ "tbin": interval(time("00:00:00.000Z"), time("01:30:00.000Z")), "interval": interval(time("00:27:13.432Z"), time("01:27:13.432Z")), "overlap": interval(time("00:27:13.432Z"), time("01:27:13.432Z")) }
+{ "tbin": interval(time("07:30:00.000Z"), time("09:00:00.000Z")), "interval": interval(time("07:49:23.938Z"), time("10:49:23.938Z")), "overlap": interval(time("07:49:23.938Z"), time("09:00:00.000Z")) }
+{ "tbin": interval(time("09:00:00.000Z"), time("10:30:00.000Z")), "interval": interval(time("07:49:23.938Z"), time("10:49:23.938Z")), "overlap": interval(time("09:00:00.000Z"), time("10:30:00.000Z")) }
+{ "tbin": interval(time("09:00:00.000Z"), time("10:30:00.000Z")), "interval": interval(time("09:35:28.039Z"), time("20:25:28.039Z")), "overlap": interval(time("09:35:28.039Z"), time("10:30:00.000Z")) }
+{ "tbin": interval(time("10:30:00.000Z"), time("12:00:00.000Z")), "interval": interval(time("07:49:23.938Z"), time("10:49:23.938Z")), "overlap": interval(time("10:30:00.000Z"), time("10:49:23.938Z")) }
+{ "tbin": interval(time("10:30:00.000Z"), time("12:00:00.000Z")), "interval": interval(time("09:35:28.039Z"), time("20:25:28.039Z")), "overlap": interval(time("10:30:00.000Z"), time("12:00:00.000Z")) }
+{ "tbin": interval(time("12:00:00.000Z"), time("13:30:00.000Z")), "interval": interval(time("09:35:28.039Z"), time("20:25:28.039Z")), "overlap": interval(time("12:00:00.000Z"), time("13:30:00.000Z")) }
+{ "tbin": interval(time("12:00:00.000Z"), time("13:30:00.000Z")), "interval": interval(time("12:49:23.938Z"), time("15:49:23.938Z")), "overlap": interval(time("12:49:23.938Z"), time("13:30:00.000Z")) }
+{ "tbin": interval(time("13:30:00.000Z"), time("15:00:00.000Z")), "interval": interval(time("09:35:28.039Z"), time("20:25:28.039Z")), "overlap": interval(time("13:30:00.000Z"), time("15:00:00.000Z")) }
+{ "tbin": interval(time("13:30:00.000Z"), time("15:00:00.000Z")), "interval": interval(time("12:49:23.938Z"), time("15:49:23.938Z")), "overlap": interval(time("13:30:00.000Z"), time("15:00:00.000Z")) }
+{ "tbin": interval(time("15:00:00.000Z"), time("16:30:00.000Z")), "interval": interval(time("09:35:28.039Z"), time("20:25:28.039Z")), "overlap": interval(time("15:00:00.000Z"), time("16:30:00.000Z")) }
+{ "tbin": interval(time("15:00:00.000Z"), time("16:30:00.000Z")), "interval": interval(time("12:49:23.938Z"), time("15:49:23.938Z")), "overlap": interval(time("15:00:00.000Z"), time("15:49:23.938Z")) }
+{ "tbin": interval(time("16:30:00.000Z"), time("18:00:00.000Z")), "interval": interval(time("09:35:28.039Z"), time("20:25:28.039Z")), "overlap": interval(time("16:30:00.000Z"), time("18:00:00.000Z")) }
+{ "tbin": interval(time("16:30:00.000Z"), time("18:00:00.000Z")), "interval": interval(time("17:28:13.900Z"), time("17:28:32.900Z")), "overlap": interval(time("17:28:13.900Z"), time("17:28:32.900Z")) }
+{ "tbin": interval(time("18:00:00.000Z"), time("19:30:00.000Z")), "interval": interval(time("09:35:28.039Z"), time("20:25:28.039Z")), "overlap": interval(time("18:00:00.000Z"), time("19:30:00.000Z")) }
+{ "tbin": interval(time("18:00:00.000Z"), time("19:30:00.000Z")), "interval": interval(time("18:00:00.000Z"), time("20:00:00.000Z")), "overlap": interval(time("18:00:00.000Z"), time("19:30:00.000Z")) }
+{ "tbin": interval(time("19:30:00.000Z"), time("21:00:00.000Z")), "interval": interval(time("09:35:28.039Z"), time("20:25:28.039Z")), "overlap": interval(time("19:30:00.000Z"), time("20:25:28.039Z")) }
+{ "tbin": interval(time("19:30:00.000Z"), time("21:00:00.000Z")), "interval": interval(time("18:00:00.000Z"), time("20:00:00.000Z")), "overlap": interval(time("19:30:00.000Z"), time("20:00:00.000Z")) }
+{ "tbin": interval(time("22:30:00.000Z"), time("00:00:00.000Z")), "interval": interval(time("23:22:38.000Z"), time("23:42:38.000Z")), "overlap": interval(time("23:22:38.000Z"), time("23:42:38.000Z")) }
+{ "tbin": interval(time("22:30:00.000Z"), time("00:00:00.000Z")), "interval": interval(time("23:30:00.000Z"), time("23:32:00.000Z")), "overlap": interval(time("23:30:00.000Z"), time("23:32:00.000Z")) }
+{ "tbin": interval(time("22:30:00.000Z"), time("00:00:00.000Z")), "interval": interval(time("23:49:23.938Z"), time("23:54:23.938Z")), "overlap": interval(time("23:49:23.938Z"), time("23:54:23.938Z")) }
+{ "tbin": interval(time("22:30:00.000Z"), time("00:00:00.000Z")), "interval": interval(time("23:49:33.938Z"), time("23:50:03.938Z")), "overlap": interval(time("23:49:33.938Z"), time("23:50:03.938Z")) }
+{ "tbin": interval(time("22:30:00.000Z"), time("00:00:00.000Z")), "interval": interval(time("23:58:17.038Z"), time("23:58:56.420Z")), "overlap": interval(time("23:58:17.038Z"), time("23:58:56.420Z")) }
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/results/temporal/overlap_bins_gby_1/overlap_bins_gby_1.1.adm b/asterix-app/src/test/resources/runtimets/results/temporal/overlap_bins_gby_1/overlap_bins_gby_1.1.adm
index 9de6522..bd05dab 100644
--- a/asterix-app/src/test/resources/runtimets/results/temporal/overlap_bins_gby_1/overlap_bins_gby_1.1.adm
+++ b/asterix-app/src/test/resources/runtimets/results/temporal/overlap_bins_gby_1/overlap_bins_gby_1.1.adm
@@ -1,11 +1,11 @@
-{ "timebin": interval-time("00:00:00.000Z, 01:30:00.000Z"), "count": 1, "total_ms": 3600000 }
-{ "timebin": interval-time("07:30:00.000Z, 09:00:00.000Z"), "count": 1, "total_ms": 4236062 }
-{ "timebin": interval-time("09:00:00.000Z, 10:30:00.000Z"), "count": 2, "total_ms": 8671961 }
-{ "timebin": interval-time("10:30:00.000Z, 12:00:00.000Z"), "count": 2, "total_ms": 6563938 }
-{ "timebin": interval-time("12:00:00.000Z, 13:30:00.000Z"), "count": 2, "total_ms": 7836062 }
-{ "timebin": interval-time("13:30:00.000Z, 15:00:00.000Z"), "count": 2, "total_ms": 10800000 }
-{ "timebin": interval-time("15:00:00.000Z, 16:30:00.000Z"), "count": 2, "total_ms": 8363938 }
-{ "timebin": interval-time("16:30:00.000Z, 18:00:00.000Z"), "count": 2, "total_ms": 5419000 }
-{ "timebin": interval-time("18:00:00.000Z, 19:30:00.000Z"), "count": 2, "total_ms": 10800000 }
-{ "timebin": interval-time("19:30:00.000Z, 21:00:00.000Z"), "count": 2, "total_ms": 5128039 }
-{ "timebin": interval-time("22:30:00.000Z, 00:00:00.000Z"), "count": 5, "total_ms": 1689382 }
+{ "timebin": interval(time("00:00:00.000Z"), time("01:30:00.000Z")), "count": 1, "total_ms": 3600000 }
+{ "timebin": interval(time("07:30:00.000Z"), time("09:00:00.000Z")), "count": 1, "total_ms": 4236062 }
+{ "timebin": interval(time("09:00:00.000Z"), time("10:30:00.000Z")), "count": 2, "total_ms": 8671961 }
+{ "timebin": interval(time("10:30:00.000Z"), time("12:00:00.000Z")), "count": 2, "total_ms": 6563938 }
+{ "timebin": interval(time("12:00:00.000Z"), time("13:30:00.000Z")), "count": 2, "total_ms": 7836062 }
+{ "timebin": interval(time("13:30:00.000Z"), time("15:00:00.000Z")), "count": 2, "total_ms": 10800000 }
+{ "timebin": interval(time("15:00:00.000Z"), time("16:30:00.000Z")), "count": 2, "total_ms": 8363938 }
+{ "timebin": interval(time("16:30:00.000Z"), time("18:00:00.000Z")), "count": 2, "total_ms": 5419000 }
+{ "timebin": interval(time("18:00:00.000Z"), time("19:30:00.000Z")), "count": 2, "total_ms": 10800000 }
+{ "timebin": interval(time("19:30:00.000Z"), time("21:00:00.000Z")), "count": 2, "total_ms": 5128039 }
+{ "timebin": interval(time("22:30:00.000Z"), time("00:00:00.000Z")), "count": 5, "total_ms": 1689382 }
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/results/temporal/overlap_bins_gby_3/overlap_bins_gby_3.1.adm b/asterix-app/src/test/resources/runtimets/results/temporal/overlap_bins_gby_3/overlap_bins_gby_3.1.adm
index c1ffd9b..28fa184 100644
--- a/asterix-app/src/test/resources/runtimets/results/temporal/overlap_bins_gby_3/overlap_bins_gby_3.1.adm
+++ b/asterix-app/src/test/resources/runtimets/results/temporal/overlap_bins_gby_3/overlap_bins_gby_3.1.adm
@@ -1,42 +1,42 @@
-{ "timebin": interval-time("10:27:00.000Z, 10:28:00.000Z"), "subgroups": [ { "subgid": "Email", "item_count": 2 }, { "subgid": "Facebook", "item_count": 2 } ] }
-{ "timebin": interval-time("10:28:00.000Z, 10:29:00.000Z"), "subgroups": [ { "subgid": "Facebook", "item_count": 1 } ] }
-{ "timebin": interval-time("10:29:00.000Z, 10:30:00.000Z"), "subgroups": [ { "subgid": "Email", "item_count": 1 }, { "subgid": "Facebook", "item_count": 2 } ] }
-{ "timebin": interval-time("10:30:00.000Z, 10:31:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("10:31:00.000Z, 10:32:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("10:32:00.000Z, 10:33:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("10:33:00.000Z, 10:34:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("10:34:00.000Z, 10:35:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("10:35:00.000Z, 10:36:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("10:36:00.000Z, 10:37:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("10:37:00.000Z, 10:38:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("10:38:00.000Z, 10:39:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("10:39:00.000Z, 10:40:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("10:40:00.000Z, 10:41:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("10:41:00.000Z, 10:42:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("10:42:00.000Z, 10:43:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("10:43:00.000Z, 10:44:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("10:44:00.000Z, 10:45:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("10:45:00.000Z, 10:46:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("10:46:00.000Z, 10:47:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("10:47:00.000Z, 10:48:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("10:48:00.000Z, 10:49:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("10:49:00.000Z, 10:50:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("10:50:00.000Z, 10:51:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("10:51:00.000Z, 10:52:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("10:52:00.000Z, 10:53:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("10:53:00.000Z, 10:54:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("10:54:00.000Z, 10:55:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("10:55:00.000Z, 10:56:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("10:56:00.000Z, 10:57:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("10:57:00.000Z, 10:58:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("10:58:00.000Z, 10:59:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("10:59:00.000Z, 11:00:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("11:00:00.000Z, 11:01:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("11:01:00.000Z, 11:02:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("11:02:00.000Z, 11:03:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("11:03:00.000Z, 11:04:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("11:04:00.000Z, 11:05:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("11:05:00.000Z, 11:06:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("11:06:00.000Z, 11:07:00.000Z"), "subgroups": [  ] }
-{ "timebin": interval-time("11:07:00.000Z, 11:08:00.000Z"), "subgroups": [ { "subgid": "Email", "item_count": 2 } ] }
-{ "timebin": interval-time("11:08:00.000Z, 11:09:00.000Z"), "subgroups": [  ] }
+{ "timebin": interval(time("10:27:00.000Z"), time("10:28:00.000Z")), "subgroups": [ { "subgid": "Email", "item_count": 2 }, { "subgid": "Facebook", "item_count": 2 } ] }
+{ "timebin": interval(time("10:28:00.000Z"), time("10:29:00.000Z")), "subgroups": [ { "subgid": "Facebook", "item_count": 1 } ] }
+{ "timebin": interval(time("10:29:00.000Z"), time("10:30:00.000Z")), "subgroups": [ { "subgid": "Email", "item_count": 1 }, { "subgid": "Facebook", "item_count": 2 } ] }
+{ "timebin": interval(time("10:30:00.000Z"), time("10:31:00.000Z")), "subgroups": [  ] }
+{ "timebin": interval(time("10:31:00.000Z"), time("10:32:00.000Z")), "subgroups": [  ] }
+{ "timebin": interval(time("10:32:00.000Z"), time("10:33:00.000Z")), "subgroups": [  ] }
+{ "timebin": interval(time("10:33:00.000Z"), time("10:34:00.000Z")), "subgroups": [  ] }
+{ "timebin": interval(time("10:34:00.000Z"), time("10:35:00.000Z")), "subgroups": [  ] }
+{ "timebin": interval(time("10:35:00.000Z"), time("10:36:00.000Z")), "subgroups": [  ] }
+{ "timebin": interval(time("10:36:00.000Z"), time("10:37:00.000Z")), "subgroups": [  ] }
+{ "timebin": interval(time("10:37:00.000Z"), time("10:38:00.000Z")), "subgroups": [  ] }
+{ "timebin": interval(time("10:38:00.000Z"), time("10:39:00.000Z")), "subgroups": [  ] }
+{ "timebin": interval(time("10:39:00.000Z"), time("10:40:00.000Z")), "subgroups": [  ] }
+{ "timebin": interval(time("10:40:00.000Z"), time("10:41:00.000Z")), "subgroups": [  ] }
+{ "timebin": interval(time("10:41:00.000Z"), time("10:42:00.000Z")), "subgroups": [  ] }
+{ "timebin": interval(time("10:42:00.000Z"), time("10:43:00.000Z")), "subgroups": [  ] }
+{ "timebin": interval(time("10:43:00.000Z"), time("10:44:00.000Z")), "subgroups": [  ] }
+{ "timebin": interval(time("10:44:00.000Z"), time("10:45:00.000Z")), "subgroups": [  ] }
+{ "timebin": interval(time("10:45:00.000Z"), time("10:46:00.000Z")), "subgroups": [  ] }
+{ "timebin": interval(time("10:46:00.000Z"), time("10:47:00.000Z")), "subgroups": [  ] }
+{ "timebin": interval(time("10:47:00.000Z"), time("10:48:00.000Z")), "subgroups": [  ] }
+{ "timebin": interval(time("10:48:00.000Z"), time("10:49:00.000Z")), "subgroups": [  ] }
+{ "timebin": interval(time("10:49:00.000Z"), time("10:50:00.000Z")), "subgroups": [  ] }
+{ "timebin": interval(time("10:50:00.000Z"), time("10:51:00.000Z")), "subgroups": [  ] }
+{ "timebin": interval(time("10:51:00.000Z"), time("10:52:00.000Z")), "subgroups": [  ] }
+{ "timebin": interval(time("10:52:00.000Z"), time("10:53:00.000Z")), "subgroups": [  ] }
+{ "timebin": interval(time("10:53:00.000Z"), time("10:54:00.000Z")), "subgroups": [  ] }
+{ "timebin": interval(time("10:54:00.000Z"), time("10:55:00.000Z")), "subgroups": [  ] }
+{ "timebin": interval(time("10:55:00.000Z"), time("10:56:00.000Z")), "subgroups": [  ] }
+{ "timebin": interval(time("10:56:00.000Z"), time("10:57:00.000Z")), "subgroups": [  ] }
+{ "timebin": interval(time("10:57:00.000Z"), time("10:58:00.000Z")), "subgroups": [  ] }
+{ "timebin": interval(time("10:58:00.000Z"), time("10:59:00.000Z")), "subgroups": [  ] }
+{ "timebin": interval(time("10:59:00.000Z"), time("11:00:00.000Z")), "subgroups": [  ] }
+{ "timebin": interval(time("11:00:00.000Z"), time("11:01:00.000Z")), "subgroups": [  ] }
+{ "timebin": interval(time("11:01:00.000Z"), time("11:02:00.000Z")), "subgroups": [  ] }
+{ "timebin": interval(time("11:02:00.000Z"), time("11:03:00.000Z")), "subgroups": [  ] }
+{ "timebin": interval(time("11:03:00.000Z"), time("11:04:00.000Z")), "subgroups": [  ] }
+{ "timebin": interval(time("11:04:00.000Z"), time("11:05:00.000Z")), "subgroups": [  ] }
+{ "timebin": interval(time("11:05:00.000Z"), time("11:06:00.000Z")), "subgroups": [  ] }
+{ "timebin": interval(time("11:06:00.000Z"), time("11:07:00.000Z")), "subgroups": [  ] }
+{ "timebin": interval(time("11:07:00.000Z"), time("11:08:00.000Z")), "subgroups": [ { "subgid": "Email", "item_count": 2 } ] }
+{ "timebin": interval(time("11:08:00.000Z"), time("11:09:00.000Z")), "subgroups": [  ] }
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/comparison/issue363_equality/issue363_equality.3.ast b/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/comparison/issue363_equality/issue363_equality.3.ast
index a25e02e..5bf9603 100644
--- a/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/comparison/issue363_equality/issue363_equality.3.ast
+++ b/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/comparison/issue363_equality/issue363_equality.3.ast
@@ -108,7 +108,7 @@
     LiteralExpr [STRING] [interval]
     :
     OperatorExpr [
-      FunctionCall null.interval-from-datetime@2[
+      FunctionCall null.interval@2[
         FunctionCall null.datetime@1[
           LiteralExpr [STRING] [-1987-11-19T02:43:57.938+08:00]
         ]
@@ -117,7 +117,7 @@
         ]
       ]
       =
-      FunctionCall null.interval-from-datetime@2[
+      FunctionCall null.interval@2[
         FunctionCall null.datetime@1[
           LiteralExpr [STRING] [-1987-11-19T02:43:57.938+08:00]
         ]
@@ -235,7 +235,7 @@
     LiteralExpr [STRING] [interval2]
     :
     OperatorExpr [
-      FunctionCall null.interval-from-datetime@2[
+      FunctionCall null.interval@2[
         FunctionCall null.datetime@1[
           LiteralExpr [STRING] [-1987-11-19T02:43:57.938+08:00]
         ]
@@ -244,7 +244,7 @@
         ]
       ]
       !=
-      FunctionCall null.interval-from-datetime@2[
+      FunctionCall null.interval@2[
         FunctionCall null.datetime@1[
           LiteralExpr [STRING] [-1983-11-19T02:43:57.938+08:00]
         ]
diff --git a/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/comparison/issue363_inequality_interval/issue363_inequality_interval.3.ast b/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/comparison/issue363_inequality_interval/issue363_inequality_interval.3.ast
index 498aa79..e59b50f 100644
--- a/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/comparison/issue363_inequality_interval/issue363_inequality_interval.3.ast
+++ b/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/comparison/issue363_inequality_interval/issue363_inequality_interval.3.ast
@@ -4,7 +4,7 @@
     LiteralExpr [STRING] [interval0]
     :
     OperatorExpr [
-      FunctionCall null.interval-from-datetime@2[
+      FunctionCall null.interval@2[
         FunctionCall null.datetime@1[
           LiteralExpr [STRING] [-1987-11-19T02:43:57.938+08:00]
         ]
@@ -13,7 +13,7 @@
         ]
       ]
       >
-      FunctionCall null.interval-from-datetime@2[
+      FunctionCall null.interval@2[
         FunctionCall null.datetime@1[
           LiteralExpr [STRING] [-1983-11-19T02:43:57.938+08:00]
         ]
@@ -27,7 +27,7 @@
     LiteralExpr [STRING] [interval1]
     :
     OperatorExpr [
-      FunctionCall null.interval-from-datetime@2[
+      FunctionCall null.interval@2[
         FunctionCall null.datetime@1[
           LiteralExpr [STRING] [-1983-11-19T02:43:57.938+08:00]
         ]
@@ -36,7 +36,7 @@
         ]
       ]
       <
-      FunctionCall null.interval-from-datetime@2[
+      FunctionCall null.interval@2[
         FunctionCall null.datetime@1[
           LiteralExpr [STRING] [-1987-11-19T02:43:57.938+08:00]
         ]
@@ -50,7 +50,7 @@
     LiteralExpr [STRING] [interval2]
     :
     OperatorExpr [
-      FunctionCall null.interval-from-datetime@2[
+      FunctionCall null.interval@2[
         FunctionCall null.datetime@1[
           LiteralExpr [STRING] [-1987-11-19T02:43:57.938+08:00]
         ]
@@ -59,7 +59,7 @@
         ]
       ]
       >=
-      FunctionCall null.interval-from-datetime@2[
+      FunctionCall null.interval@2[
         FunctionCall null.datetime@1[
           LiteralExpr [STRING] [-1983-11-19T02:43:57.938+08:00]
         ]
@@ -73,7 +73,7 @@
     LiteralExpr [STRING] [interval3]
     :
     OperatorExpr [
-      FunctionCall null.interval-from-datetime@2[
+      FunctionCall null.interval@2[
         FunctionCall null.datetime@1[
           LiteralExpr [STRING] [-1983-11-19T02:43:57.938+08:00]
         ]
@@ -82,7 +82,7 @@
         ]
       ]
       <=
-      FunctionCall null.interval-from-datetime@2[
+      FunctionCall null.interval@2[
         FunctionCall null.datetime@1[
           LiteralExpr [STRING] [-1987-11-19T02:43:57.938+08:00]
         ]
diff --git a/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/constructor/interval/interval.3.ast b/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/constructor/interval/interval.3.ast
index fd0e9c5..0382c4f 100644
--- a/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/constructor/interval/interval.3.ast
+++ b/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/constructor/interval/interval.3.ast
@@ -2,182 +2,6 @@
 Query:
 RecordConstructor [
   (
-    LiteralExpr [STRING] [interval11]
-    :
-    FunctionCall test.interval-from-date@2[
-      FunctionCall test.date@1[
-        LiteralExpr [STRING] [2010-10-30]
-      ]
-      FunctionCall test.date@1[
-        LiteralExpr [STRING] [2012-10-21]
-      ]
-    ]
-  )
-  (
-    LiteralExpr [STRING] [interval12]
-    :
-    FunctionCall test.interval-from-date@2[
-      LiteralExpr [STRING] [2010-10-30]
-      FunctionCall test.date@1[
-        LiteralExpr [STRING] [2012-10-21]
-      ]
-    ]
-  )
-  (
-    LiteralExpr [STRING] [interval13]
-    :
-    FunctionCall test.interval-from-date@2[
-      FunctionCall test.date@1[
-        LiteralExpr [STRING] [2010-10-30]
-      ]
-      LiteralExpr [STRING] [2012-10-21]
-    ]
-  )
-  (
-    LiteralExpr [STRING] [interval14]
-    :
-    FunctionCall test.interval-from-date@2[
-      LiteralExpr [STRING] [2010-10-30]
-      LiteralExpr [STRING] [2012-10-21]
-    ]
-  )
-  (
-    LiteralExpr [STRING] [interval15]
-    :
-    FunctionCall test.interval-from-date@2[
-      LiteralExpr [NULL]
-      LiteralExpr [STRING] [2012-10-21]
-    ]
-  )
-  (
-    LiteralExpr [STRING] [interval16]
-    :
-    FunctionCall test.interval-from-date@2[
-      LiteralExpr [STRING] [2010-10-30]
-      LiteralExpr [NULL]
-    ]
-  )
-  (
-    LiteralExpr [STRING] [interval21]
-    :
-    FunctionCall test.interval-from-time@2[
-      FunctionCall test.time@1[
-        LiteralExpr [STRING] [03:04:05.678-11:00]
-      ]
-      FunctionCall test.time@1[
-        LiteralExpr [STRING] [232425267+0200]
-      ]
-    ]
-  )
-  (
-    LiteralExpr [STRING] [interval22]
-    :
-    FunctionCall test.interval-from-time@2[
-      LiteralExpr [STRING] [03:04:05.678-11:00]
-      FunctionCall test.time@1[
-        LiteralExpr [STRING] [232425267+0200]
-      ]
-    ]
-  )
-  (
-    LiteralExpr [STRING] [interval23]
-    :
-    FunctionCall test.interval-from-time@2[
-      FunctionCall test.time@1[
-        LiteralExpr [STRING] [03:04:05.678-11:00]
-      ]
-      LiteralExpr [STRING] [232425267+0200]
-    ]
-  )
-  (
-    LiteralExpr [STRING] [interval24]
-    :
-    FunctionCall test.interval-from-time@2[
-      LiteralExpr [STRING] [03:04:05.678-11:00]
-      LiteralExpr [STRING] [232425267+0200]
-    ]
-  )
-  (
-    LiteralExpr [STRING] [interval25]
-    :
-    FunctionCall test.interval-from-time@2[
-      LiteralExpr [NULL]
-      FunctionCall test.time@1[
-        LiteralExpr [STRING] [232425267+0200]
-      ]
-    ]
-  )
-  (
-    LiteralExpr [STRING] [interval26]
-    :
-    FunctionCall test.interval-from-time@2[
-      FunctionCall test.time@1[
-        LiteralExpr [STRING] [03:04:05.678-11:00]
-      ]
-      LiteralExpr [NULL]
-    ]
-  )
-  (
-    LiteralExpr [STRING] [interval31]
-    :
-    FunctionCall test.interval-from-datetime@2[
-      FunctionCall test.datetime@1[
-        LiteralExpr [STRING] [-1987-11-19T02:43:57.938+08:00]
-      ]
-      FunctionCall test.datetime@1[
-        LiteralExpr [STRING] [19991112T124935948-0700]
-      ]
-    ]
-  )
-  (
-    LiteralExpr [STRING] [interval32]
-    :
-    FunctionCall test.interval-from-datetime@2[
-      LiteralExpr [STRING] [-1987-11-19T02:43:57.938+08:00]
-      FunctionCall test.datetime@1[
-        LiteralExpr [STRING] [19991112T124935948-0700]
-      ]
-    ]
-  )
-  (
-    LiteralExpr [STRING] [interval33]
-    :
-    FunctionCall test.interval-from-datetime@2[
-      FunctionCall test.datetime@1[
-        LiteralExpr [STRING] [-1987-11-19T02:43:57.938+08:00]
-      ]
-      LiteralExpr [STRING] [19991112T124935948-0700]
-    ]
-  )
-  (
-    LiteralExpr [STRING] [interval34]
-    :
-    FunctionCall test.interval-from-datetime@2[
-      LiteralExpr [STRING] [-1987-11-19T02:43:57.938+08:00]
-      LiteralExpr [STRING] [19991112T124935948-0700]
-    ]
-  )
-  (
-    LiteralExpr [STRING] [interval35]
-    :
-    FunctionCall test.interval-from-datetime@2[
-      LiteralExpr [NULL]
-      FunctionCall test.datetime@1[
-        LiteralExpr [STRING] [19991112T124935948-0700]
-      ]
-    ]
-  )
-  (
-    LiteralExpr [STRING] [interval36]
-    :
-    FunctionCall test.interval-from-datetime@2[
-      FunctionCall test.datetime@1[
-        LiteralExpr [STRING] [-1987-11-19T02:43:57.938+08:00]
-      ]
-      LiteralExpr [NULL]
-    ]
-  )
-  (
     LiteralExpr [STRING] [interval41]
     :
     FunctionCall test.interval-start-from-date@2[
@@ -357,4 +181,100 @@
       LiteralExpr [NULL]
     ]
   )
-]
+  (
+    LiteralExpr [STRING] [interval71]
+    :
+    FunctionCall test.interval@2[
+      FunctionCall test.date@1[
+        LiteralExpr [STRING] [2010-10-30]
+      ]
+      FunctionCall test.date@1[
+        LiteralExpr [STRING] [2012-10-21]
+      ]
+    ]
+  )
+  (
+    LiteralExpr [STRING] [interval72]
+    :
+    FunctionCall test.interval@2[
+      LiteralExpr [NULL]
+      FunctionCall test.date@1[
+        LiteralExpr [STRING] [2012-10-21]
+      ]
+    ]
+  )
+  (
+    LiteralExpr [STRING] [interval73]
+    :
+    FunctionCall test.interval@2[
+      FunctionCall test.date@1[
+        LiteralExpr [STRING] [2010-10-30]
+      ]
+      LiteralExpr [NULL]
+    ]
+  )
+  (
+    LiteralExpr [STRING] [interval74]
+    :
+    FunctionCall test.interval@2[
+      FunctionCall test.time@1[
+        LiteralExpr [STRING] [03:04:05.678-11:00]
+      ]
+      FunctionCall test.time@1[
+        LiteralExpr [STRING] [232425267+0200]
+      ]
+    ]
+  )
+  (
+    LiteralExpr [STRING] [interval75]
+    :
+    FunctionCall test.interval@2[
+      LiteralExpr [NULL]
+      FunctionCall test.time@1[
+        LiteralExpr [STRING] [232425267+0200]
+      ]
+    ]
+  )
+  (
+    LiteralExpr [STRING] [interval76]
+    :
+    FunctionCall test.interval@2[
+      FunctionCall test.time@1[
+        LiteralExpr [STRING] [03:04:05.678-11:00]
+      ]
+      LiteralExpr [NULL]
+    ]
+  )
+  (
+    LiteralExpr [STRING] [interval77]
+    :
+    FunctionCall test.interval@2[
+      FunctionCall test.datetime@1[
+        LiteralExpr [STRING] [-1987-11-19T02:43:57.938+08:00]
+      ]
+      FunctionCall test.datetime@1[
+        LiteralExpr [STRING] [19991112T124935948-0700]
+      ]
+    ]
+  )
+  (
+    LiteralExpr [STRING] [interval78]
+    :
+    FunctionCall test.interval@2[
+      LiteralExpr [NULL]
+      FunctionCall test.datetime@1[
+        LiteralExpr [STRING] [19991112T124935948-0700]
+      ]
+    ]
+  )
+  (
+    LiteralExpr [STRING] [interval79]
+    :
+    FunctionCall test.interval@2[
+      FunctionCall test.datetime@1[
+        LiteralExpr [STRING] [-1987-11-19T02:43:57.938+08:00]
+      ]
+      LiteralExpr [NULL]
+    ]
+  )
+]
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/temporal/accessors_interval/accessors_interval.3.ast b/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/temporal/accessors_interval/accessors_interval.3.ast
index da3708c..f3014f0 100644
--- a/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/temporal/accessors_interval/accessors_interval.3.ast
+++ b/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/temporal/accessors_interval/accessors_interval.3.ast
@@ -5,11 +5,13 @@
     LiteralExpr [STRING] [start1]
     :
     FunctionCall test.get-interval-start@1[
-      FunctionCall test.interval-from-date@2[
+      FunctionCall test.interval@2[
         FunctionCall test.date@1[
           LiteralExpr [STRING] [2010-10-30]
         ]
-        LiteralExpr [STRING] [2013-04-01]
+        FunctionCall test.date@1[
+          LiteralExpr [STRING] [2013-04-01]
+        ]
       ]
     ]
   )
@@ -17,11 +19,13 @@
     LiteralExpr [STRING] [end1]
     :
     FunctionCall test.get-interval-end@1[
-      FunctionCall test.interval-from-date@2[
+      FunctionCall test.interval@2[
         FunctionCall test.date@1[
           LiteralExpr [STRING] [2010-10-30]
         ]
-        LiteralExpr [STRING] [2013-04-01]
+        FunctionCall test.date@1[
+          LiteralExpr [STRING] [2013-04-01]
+        ]
       ]
     ]
   )
@@ -29,8 +33,10 @@
     LiteralExpr [STRING] [start2]
     :
     FunctionCall test.get-interval-start@1[
-      FunctionCall test.interval-from-time@2[
-        LiteralExpr [STRING] [08:09:10.234Z]
+      FunctionCall test.interval@2[
+        FunctionCall test.time@1[
+          LiteralExpr [STRING] [08:09:10.234Z]
+        ]
         FunctionCall test.time@1[
           LiteralExpr [STRING] [203040567+0800]
         ]
@@ -41,8 +47,10 @@
     LiteralExpr [STRING] [end2]
     :
     FunctionCall test.get-interval-end@1[
-      FunctionCall test.interval-from-time@2[
-        LiteralExpr [STRING] [08:09:10.234Z]
+      FunctionCall test.interval@2[
+        FunctionCall test.time@1[
+          LiteralExpr [STRING] [08:09:10.234Z]
+        ]
         FunctionCall test.time@1[
           LiteralExpr [STRING] [203040567+0800]
         ]
@@ -53,8 +61,10 @@
     LiteralExpr [STRING] [start3]
     :
     FunctionCall test.get-interval-start@1[
-      FunctionCall test.interval-from-datetime@2[
-        LiteralExpr [STRING] [2009-09-01T00:00:00.000+08:00]
+      FunctionCall test.interval@2[
+        FunctionCall test.datetime@1[
+          LiteralExpr [STRING] [2009-09-01T00:00:00.000+08:00]
+        ]
         FunctionCall test.datetime-from-date-time@2[
           FunctionCall test.date@1[
             LiteralExpr [STRING] [2013-04-04]
@@ -70,8 +80,10 @@
     LiteralExpr [STRING] [end3]
     :
     FunctionCall test.get-interval-end@1[
-      FunctionCall test.interval-from-datetime@2[
-        LiteralExpr [STRING] [2009-09-01T00:00:00.000+08:00]
+      FunctionCall test.interval@2[
+        FunctionCall test.datetime@1[
+          LiteralExpr [STRING] [2009-09-01T00:00:00.000+08:00]
+        ]
         FunctionCall test.datetime-from-date-time@2[
           FunctionCall test.date@1[
             LiteralExpr [STRING] [2013-04-04]
@@ -83,4 +95,4 @@
       ]
     ]
   )
-]
+]
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/temporal/duration_functions/duration_functions.3.ast b/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/temporal/duration_functions/duration_functions.3.ast
index 0ab1988..6d2d197 100644
--- a/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/temporal/duration_functions/duration_functions.3.ast
+++ b/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/temporal/duration_functions/duration_functions.3.ast
@@ -5,9 +5,13 @@
     LiteralExpr [STRING] [dr1]
     :
     FunctionCall test.duration-from-interval@1[
-      FunctionCall test.interval-from-date@2[
-        LiteralExpr [STRING] [2010-10-30]
-        LiteralExpr [STRING] [2010-12-21]
+      FunctionCall test.interval@2[
+        FunctionCall test.date@1[
+          LiteralExpr [STRING] [2010-10-30]
+        ]
+        FunctionCall test.date@1[
+          LiteralExpr [STRING] [2010-12-21]
+        ]
       ]
     ]
   )
@@ -15,9 +19,13 @@
     LiteralExpr [STRING] [dr2]
     :
     FunctionCall test.duration-from-interval@1[
-      FunctionCall test.interval-from-datetime@2[
-        LiteralExpr [STRING] [2012-06-26T01:01:01.111]
-        LiteralExpr [STRING] [2012-07-27T02:02:02.222]
+      FunctionCall test.interval@2[
+        FunctionCall test.datetime@1[
+          LiteralExpr [STRING] [2012-06-26T01:01:01.111]
+        ]
+        FunctionCall test.datetime@1[
+          LiteralExpr [STRING] [2012-07-27T02:02:02.222]
+        ]
       ]
     ]
   )
@@ -25,9 +33,13 @@
     LiteralExpr [STRING] [dr3]
     :
     FunctionCall test.duration-from-interval@1[
-      FunctionCall test.interval-from-time@2[
-        LiteralExpr [STRING] [12:32:38]
-        LiteralExpr [STRING] [20:29:20]
+      FunctionCall test.interval@2[
+        FunctionCall test.time@1[
+          LiteralExpr [STRING] [12:32:38]
+        ]
+        FunctionCall test.time@1[
+          LiteralExpr [STRING] [20:29:20]
+        ]
       ]
     ]
   )
@@ -38,4 +50,4 @@
       LiteralExpr [NULL]
     ]
   )
-]
+]
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/temporal/get_overlapping_interval/get_overlapping_interval.3.ast b/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/temporal/get_overlapping_interval/get_overlapping_interval.3.ast
index 72400ac..8fb6da7 100644
--- a/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/temporal/get_overlapping_interval/get_overlapping_interval.3.ast
+++ b/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/temporal/get_overlapping_interval/get_overlapping_interval.3.ast
@@ -5,7 +5,7 @@
     LiteralExpr [STRING] [overlap1]
     :
     FunctionCall null.get-overlapping-interval@2[
-      FunctionCall null.interval-from-time@2[
+      FunctionCall null.interval@2[
         FunctionCall null.time@1[
           LiteralExpr [STRING] [11:23:39]
         ]
@@ -13,7 +13,7 @@
           LiteralExpr [STRING] [18:27:19]
         ]
       ]
-      FunctionCall null.interval-from-time@2[
+      FunctionCall null.interval@2[
         FunctionCall null.time@1[
           LiteralExpr [STRING] [12:23:39]
         ]
@@ -27,7 +27,7 @@
     LiteralExpr [STRING] [overlap2]
     :
     FunctionCall null.get-overlapping-interval@2[
-      FunctionCall null.interval-from-time@2[
+      FunctionCall null.interval@2[
         FunctionCall null.time@1[
           LiteralExpr [STRING] [12:23:39]
         ]
@@ -35,7 +35,7 @@
           LiteralExpr [STRING] [18:27:19]
         ]
       ]
-      FunctionCall null.interval-from-time@2[
+      FunctionCall null.interval@2[
         FunctionCall null.time@1[
           LiteralExpr [STRING] [07:19:39]
         ]
@@ -49,7 +49,7 @@
     LiteralExpr [STRING] [overlap3]
     :
     FunctionCall null.get-overlapping-interval@2[
-      FunctionCall null.interval-from-date@2[
+      FunctionCall null.interval@2[
         FunctionCall null.date@1[
           LiteralExpr [STRING] [1980-11-30]
         ]
@@ -57,7 +57,7 @@
           LiteralExpr [STRING] [1999-09-09]
         ]
       ]
-      FunctionCall null.interval-from-date@2[
+      FunctionCall null.interval@2[
         FunctionCall null.date@1[
           LiteralExpr [STRING] [2013-01-01]
         ]
@@ -71,7 +71,7 @@
     LiteralExpr [STRING] [overlap4]
     :
     FunctionCall null.get-overlapping-interval@2[
-      FunctionCall null.interval-from-date@2[
+      FunctionCall null.interval@2[
         FunctionCall null.date@1[
           LiteralExpr [STRING] [1980-11-30]
         ]
@@ -79,7 +79,7 @@
           LiteralExpr [STRING] [2099-09-09]
         ]
       ]
-      FunctionCall null.interval-from-date@2[
+      FunctionCall null.interval@2[
         FunctionCall null.date@1[
           LiteralExpr [STRING] [2013-01-01]
         ]
@@ -93,7 +93,7 @@
     LiteralExpr [STRING] [overlap5]
     :
     FunctionCall null.get-overlapping-interval@2[
-      FunctionCall null.interval-from-datetime@2[
+      FunctionCall null.interval@2[
         FunctionCall null.datetime@1[
           LiteralExpr [STRING] [1844-03-03T11:19:39]
         ]
@@ -101,7 +101,7 @@
           LiteralExpr [STRING] [2000-10-30T18:27:19]
         ]
       ]
-      FunctionCall null.interval-from-datetime@2[
+      FunctionCall null.interval@2[
         FunctionCall null.datetime@1[
           LiteralExpr [STRING] [1989-03-04T12:23:39]
         ]
@@ -115,7 +115,7 @@
     LiteralExpr [STRING] [overlap6]
     :
     FunctionCall null.get-overlapping-interval@2[
-      FunctionCall null.interval-from-datetime@2[
+      FunctionCall null.interval@2[
         FunctionCall null.datetime@1[
           LiteralExpr [STRING] [1989-03-04T12:23:39]
         ]
@@ -123,7 +123,7 @@
           LiteralExpr [STRING] [2000-10-30T18:27:19]
         ]
       ]
-      FunctionCall null.interval-from-datetime@2[
+      FunctionCall null.interval@2[
         FunctionCall null.datetime@1[
           LiteralExpr [STRING] [1844-03-03T11:19:39]
         ]
@@ -134,4 +134,4 @@
     ]
   )
 ]
-]
+]
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/temporal/interval_functions/interval_functions.3.ast b/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/temporal/interval_functions/interval_functions.3.ast
index e85501d..f4e11c6 100644
--- a/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/temporal/interval_functions/interval_functions.3.ast
+++ b/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/temporal/interval_functions/interval_functions.3.ast
@@ -2,21 +2,33 @@
 Query:
 LetVariable [ Name=itv1 ]
   :=
-  FunctionCall test.interval-from-date@2[
-    LiteralExpr [STRING] [2010-10-30]
-    LiteralExpr [STRING] [2010-12-21]
+  FunctionCall test.interval@2[
+    FunctionCall test.date@1[
+      LiteralExpr [STRING] [2010-10-30]
+    ]
+    FunctionCall test.date@1[
+      LiteralExpr [STRING] [2010-12-21]
+    ]
   ]
 LetVariable [ Name=itv2 ]
   :=
-  FunctionCall test.interval-from-date@2[
-    LiteralExpr [STRING] [2011-10-30]
-    LiteralExpr [STRING] [2012-10-21]
+  FunctionCall test.interval@2[
+    FunctionCall test.date@1[
+      LiteralExpr [STRING] [2011-10-30]
+    ]
+    FunctionCall test.date@1[
+      LiteralExpr [STRING] [2012-10-21]
+    ]
   ]
 LetVariable [ Name=itv3 ]
   :=
-  FunctionCall test.interval-from-date@2[
-    LiteralExpr [STRING] [2010-12-21]
-    LiteralExpr [STRING] [2013-01-01]
+  FunctionCall test.interval@2[
+    FunctionCall test.date@1[
+      LiteralExpr [STRING] [2010-12-21]
+    ]
+    FunctionCall test.date@1[
+      LiteralExpr [STRING] [2013-01-01]
+    ]
   ]
 LetVariable [ Name=blnBefore1 ]
   :=
@@ -44,21 +56,33 @@
   ]
 LetVariable [ Name=itv4 ]
   :=
-  FunctionCall test.interval-from-datetime@2[
-    LiteralExpr [STRING] [2012-06-26T01:01:01.111]
-    LiteralExpr [STRING] [2012-07-27T02:02:02.222]
+  FunctionCall test.interval@2[
+    FunctionCall test.datetime@1[
+      LiteralExpr [STRING] [2012-06-26T01:01:01.111]
+    ]
+    FunctionCall test.datetime@1[
+      LiteralExpr [STRING] [2012-07-27T02:02:02.222]
+    ]
   ]
 LetVariable [ Name=itv5 ]
   :=
-  FunctionCall test.interval-from-datetime@2[
-    LiteralExpr [STRING] [20120727T020202222]
-    LiteralExpr [STRING] [2013-08-08T03:03:03.333]
+  FunctionCall test.interval@2[
+    FunctionCall test.datetime@1[
+      LiteralExpr [STRING] [20120727T020202222]
+    ]
+    FunctionCall test.datetime@1[
+      LiteralExpr [STRING] [2013-08-08T03:03:03.333]
+    ]
   ]
 LetVariable [ Name=itv6 ]
   :=
-  FunctionCall test.interval-from-datetime@2[
-    LiteralExpr [STRING] [19000707T020202222]
-    LiteralExpr [STRING] [2013-08-07T03:03:03.333]
+  FunctionCall test.interval@2[
+    FunctionCall test.datetime@1[
+      LiteralExpr [STRING] [19000707T020202222]
+    ]
+    FunctionCall test.datetime@1[
+      LiteralExpr [STRING] [2013-08-07T03:03:03.333]
+    ]
   ]
 LetVariable [ Name=blnMeet1 ]
   :=
@@ -86,21 +110,33 @@
   ]
 LetVariable [ Name=itv7 ]
   :=
-  FunctionCall test.interval-from-time@2[
-    LiteralExpr [STRING] [12:32:38]
-    LiteralExpr [STRING] [20:29:20]
+  FunctionCall test.interval@2[
+    FunctionCall test.time@1[
+      LiteralExpr [STRING] [12:32:38]
+    ]
+    FunctionCall test.time@1[
+      LiteralExpr [STRING] [20:29:20]
+    ]
   ]
 LetVariable [ Name=itv8 ]
   :=
-  FunctionCall test.interval-from-time@2[
-    LiteralExpr [STRING] [17:48:19]
-    LiteralExpr [STRING] [22:19:49]
+  FunctionCall test.interval@2[
+    FunctionCall test.time@1[
+      LiteralExpr [STRING] [17:48:19]
+    ]
+    FunctionCall test.time@1[
+      LiteralExpr [STRING] [22:19:49]
+    ]
   ]
 LetVariable [ Name=itv9 ]
   :=
-  FunctionCall test.interval-from-time@2[
-    LiteralExpr [STRING] [01:32:49]
-    LiteralExpr [STRING] [17:48:19]
+  FunctionCall test.interval@2[
+    FunctionCall test.time@1[
+      LiteralExpr [STRING] [01:32:49]
+    ]
+    FunctionCall test.time@1[
+      LiteralExpr [STRING] [17:48:19]
+    ]
   ]
 LetVariable [ Name=blnOverlaps1 ]
   :=
@@ -140,9 +176,13 @@
   ]
 LetVariable [ Name=itv10 ]
   :=
-  FunctionCall test.interval-from-date@2[
-    LiteralExpr [STRING] [2010-10-30]
-    LiteralExpr [STRING] [2010-11-30]
+  FunctionCall test.interval@2[
+    FunctionCall test.date@1[
+      LiteralExpr [STRING] [2010-10-30]
+    ]
+    FunctionCall test.date@1[
+      LiteralExpr [STRING] [2010-11-30]
+    ]
   ]
 LetVariable [ Name=blnStarts1 ]
   :=
@@ -170,21 +210,33 @@
   ]
 LetVariable [ Name=itv10 ]
   :=
-  FunctionCall test.interval-from-datetime@2[
-    LiteralExpr [STRING] [19000707T020202222]
-    LiteralExpr [STRING] [2013-08-07T03:03:03.333]
+  FunctionCall test.interval@2[
+    FunctionCall test.datetime@1[
+      LiteralExpr [STRING] [19000707T020202222]
+    ]
+    FunctionCall test.datetime@1[
+      LiteralExpr [STRING] [2013-08-07T03:03:03.333]
+    ]
   ]
 LetVariable [ Name=itv11 ]
   :=
-  FunctionCall test.interval-from-datetime@2[
-    LiteralExpr [STRING] [19990707T020202222]
-    LiteralExpr [STRING] [2013-08-07T03:03:03.333]
+  FunctionCall test.interval@2[
+    FunctionCall test.datetime@1[
+      LiteralExpr [STRING] [19990707T020202222]
+    ]
+    FunctionCall test.datetime@1[
+      LiteralExpr [STRING] [2013-08-07T03:03:03.333]
+    ]
   ]
 LetVariable [ Name=itv12 ]
   :=
-  FunctionCall test.interval-from-datetime@2[
-    LiteralExpr [STRING] [-19990707T020202222]
-    LiteralExpr [STRING] [2013-08-07T03:03:03.333]
+  FunctionCall test.interval@2[
+    FunctionCall test.datetime@1[
+      LiteralExpr [STRING] [-19990707T020202222]
+    ]
+    FunctionCall test.datetime@1[
+      LiteralExpr [STRING] [2013-08-07T03:03:03.333]
+    ]
   ]
 LetVariable [ Name=blnCovers1 ]
   :=
@@ -212,9 +264,13 @@
   ]
 LetVariable [ Name=itv11 ]
   :=
-  FunctionCall test.interval-from-time@2[
-    LiteralExpr [STRING] [19:00:00.009]
-    LiteralExpr [STRING] [20:29:20.000]
+  FunctionCall test.interval@2[
+    FunctionCall test.time@1[
+      LiteralExpr [STRING] [19:00:00.009]
+    ]
+    FunctionCall test.time@1[
+      LiteralExpr [STRING] [20:29:20.000]
+    ]
   ]
 LetVariable [ Name=blnEnds1 ]
   :=
@@ -406,4 +462,4 @@
     Variable [ Name=null3 ]
   )
 ]
-]
+]
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/temporal/overlap_bins/overlap_bins.3.ast b/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/temporal/overlap_bins/overlap_bins.3.ast
index 6d2e508..962d9ff 100644
--- a/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/temporal/overlap_bins/overlap_bins.3.ast
+++ b/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/temporal/overlap_bins/overlap_bins.3.ast
@@ -4,7 +4,7 @@
     LiteralExpr [STRING] [timebins]
     :
     FunctionCall null.overlap-bins@3[
-      FunctionCall null.interval-from-time@2[
+      FunctionCall null.interval@2[
         FunctionCall null.time@1[
           LiteralExpr [STRING] [17:23:37]
         ]
@@ -24,7 +24,7 @@
     LiteralExpr [STRING] [datebins]
     :
     FunctionCall null.overlap-bins@3[
-      FunctionCall null.interval-from-date@2[
+      FunctionCall null.interval@2[
         FunctionCall null.date@1[
           LiteralExpr [STRING] [1984-03-17]
         ]
@@ -44,7 +44,7 @@
     LiteralExpr [STRING] [datetimebins]
     :
     FunctionCall null.overlap-bins@3[
-      FunctionCall null.interval-from-datetime@2[
+      FunctionCall null.interval@2[
         FunctionCall null.datetime@1[
           LiteralExpr [STRING] [1800-01-01T23:59:48.938]
         ]
diff --git a/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/temporal/overlap_bins_gby_3/overlap_bins_gby_3.3.ast b/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/temporal/overlap_bins_gby_3/overlap_bins_gby_3.3.ast
index 5197186..645c82c 100644
--- a/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/temporal/overlap_bins_gby_3/overlap_bins_gby_3.3.ast
+++ b/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/temporal/overlap_bins_gby_3/overlap_bins_gby_3.3.ast
@@ -73,7 +73,7 @@
 ]
 ]
 FROM [  FunctionCall multitask.overlap-bins@3[
-    FunctionCall multitask.interval-from-time@2[
+    FunctionCall multitask.interval@2[
       FunctionCall multitask.min@1[
         (
           SELECT ELEMENT [
diff --git a/asterix-app/src/test/resources/runtimets/testsuite.xml b/asterix-app/src/test/resources/runtimets/testsuite.xml
index d593039..1c99e67 100644
--- a/asterix-app/src/test/resources/runtimets/testsuite.xml
+++ b/asterix-app/src/test/resources/runtimets/testsuite.xml
@@ -6297,11 +6297,6 @@
                 <output-dir compare="Text">time_functions</output-dir>
             </compilation-unit>
         </test-case>
-        <test-case FilePath="constructor">
-            <compilation-unit name="interval">
-                <output-dir compare="Text">interval</output-dir>
-            </compilation-unit>
-        </test-case>
         <test-case FilePath="temporal">
             <compilation-unit name="duration_comps">
                 <output-dir compare="Text">duration_comps</output-dir>
diff --git a/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml b/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
index d56cdad..ba36184 100644
--- a/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
+++ b/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
@@ -68,7 +68,7 @@
             </compilation-unit>
         </test-case>
     </test-group>
-    <!-- 
+    <!--
     <test-group name="union">
         <test-case FilePath="union">
             <compilation-unit name="union">
@@ -6123,11 +6123,6 @@
         <test-case FilePath="temporal">
             <compilation-unit name="time_functions">
                 <output-dir compare="Text">time_functions</output-dir>
-            </compilation-unit>
-        </test-case>
-        <test-case FilePath="constructor">
-            <compilation-unit name="interval">
-                <output-dir compare="Text">interval</output-dir>
             </compilation-unit>
         </test-case>
         <test-case FilePath="temporal">
diff --git a/asterix-app/src/test/resources/runtimets/testsuite_sqlpp_parser.xml b/asterix-app/src/test/resources/runtimets/testsuite_sqlpp_parser.xml
index bb7128a..f21d7f7 100644
--- a/asterix-app/src/test/resources/runtimets/testsuite_sqlpp_parser.xml
+++ b/asterix-app/src/test/resources/runtimets/testsuite_sqlpp_parser.xml
@@ -68,7 +68,7 @@
             </compilation-unit>
         </test-case>
     </test-group>
-    <!-- 
+    <!--
     <test-group name="union">
         <test-case FilePath="union">
             <compilation-unit name="union">
@@ -6347,11 +6347,6 @@
         <test-case FilePath="temporal">
             <compilation-unit name="time_functions">
                 <output-dir compare="AST">time_functions</output-dir>
-            </compilation-unit>
-        </test-case>
-        <test-case FilePath="constructor">
-            <compilation-unit name="interval">
-                <output-dir compare="AST">interval</output-dir>
             </compilation-unit>
         </test-case>
         <test-case FilePath="temporal">
diff --git a/asterix-doc/src/site/markdown/aql/allens.md b/asterix-doc/src/site/markdown/aql/allens.md
index 75fa218..ddf81a6 100644
--- a/asterix-doc/src/site/markdown/aql/allens.md
+++ b/asterix-doc/src/site/markdown/aql/allens.md
@@ -27,9 +27,9 @@
 
 ## <a id="AboutAllensRelations">About Allen's Relations</a> <font size="4"><a href="#toc">[Back to TOC]</a></font> ##
 
-AsterixDB supports Allen's relations over interval types. Allen's relations are also called Allen's interval algebra. There are totally 13 base relations described by this algebra, and all of them are supported in AsterixDB (note that `interval-equals` is supported by the `=` comparison symbol so there is no extra function for it). 
+AsterixDB supports Allen's relations over interval types. Allen's relations are also called Allen's interval algebra. There are totally 13 base relations described by this algebra, and all of them are supported in AsterixDB (note that `interval-equals` is supported by the `=` comparison symbol so there is no extra function for it).
 
-A detailed description of Allen's relations can be found from its [wikipedia entry](http://en.wikipedia.org/wiki/Allen's_interval_algebra). 
+A detailed description of Allen's relations can be found from its [wikipedia entry](http://en.wikipedia.org/wiki/Allen's_interval_algebra).
 
 ## <a id="AllensRelatonsFunctions">Allen's Relations Functions</a> <font size="4"><a href="#toc">[Back to TOC]</a></font> ##
 
@@ -40,19 +40,19 @@
         interval-before(interval1, interval2)
         interval-after(interval1, interval2)
 
- * These two functions check whether an interval happens before/after another interval. 
+ * These two functions check whether an interval happens before/after another interval.
  * Arguments:
     * `interval1`, `interval2`: two intervals to be compared
  * Return Value:
-   
+
     A `boolean` value. Specifically, `interval-before(interval1, interval2)` is true if and only if `interval1.end < interval2.start`, and `interval-after(interval1, interval2)` is true if and only if `interval1.start > interval2.end`. If any of the two inputs is `null`, `null` is returned.
 
  * Examples:
 
-        let $itv1 := interval-from-date("2000-01-01", "2005-01-01")
-        let $itv2 := interval-from-date("2005-05-01", "2012-09-09")
+        let $itv1 := interval(date("2000-01-01"), date("2005-01-01"))
+        let $itv2 := interval(date("2005-05-01"), date("2012-09-09"))
         return {"interval-before": interval-before($itv1, $itv2), "interval-after": interval-after($itv2, $itv1)}
-        
+
  * The expected result is:
 
         { "interval-before": true, "interval-after": true }
@@ -69,7 +69,7 @@
  * Arguments:
     * `interval1`, `interval2`: two intervals to be compared
  * Return Value:
-   
+
     A `boolean` value. Specifically, `interval-covers(interval1, interval2)` is true if and only if
 
         interval1.start <= interval2.start
@@ -84,14 +84,14 @@
 
  * Examples:
 
-        let $itv1 := interval-from-date("2000-01-01", "2005-01-01")
-        let $itv2 := interval-from-date("2000-03-01", "2004-09-09")
-        let $itv3 := interval-from-date("2006-08-01", "2007-03-01")
-        let $itv4 := interval-from-date("2004-09-10", "2012-08-01")
+        let $itv1 := interval(date("2000-01-01"), date("2005-01-01"))
+        let $itv2 := interval(date("2000-03-01"), date("2004-09-09"))
+        let $itv3 := interval(date("2006-08-01"), date("2007-03-01"))
+        let $itv4 := interval(date("2004-09-10"), date("2012-08-01"))
         return {"interval-covers": interval-covers($itv1, $itv2), "interval-covered-by": interval-covered-by($itv3, $itv4)}
-        
+
  * The expected result is:
- 
+
         { "interval-covers": true, "interval-covered-by": true }
 
 
@@ -106,7 +106,7 @@
  * Arguments:
     * `interval1`, `interval2`: two intervals to be compared
  * Return Value:
-   
+
     A `boolean` value. Specifically, `interval-overlaps(interval1, interval2)` is true if and only if
 
         interval1.start < interval2.start
@@ -125,15 +125,15 @@
 
  * Examples:
 
-        let $itv1 := interval-from-date("2000-01-01", "2005-01-01")
-        let $itv2 := interval-from-date("2004-05-01", "2012-09-09")
-        let $itv3 := interval-from-date("2006-08-01", "2007-03-01")
-        let $itv4 := interval-from-date("2004-09-10", "2006-12-31")
-        return {"overlaps": interval-overlaps($itv1, $itv2), 
+        let $itv1 := interval(date("2000-01-01"), date("2005-01-01"))
+        let $itv2 := interval(date("2004-05-01"), date("2012-09-09"))
+        let $itv3 := interval(date("2006-08-01"), date("2007-03-01"))
+        let $itv4 := interval(date("2004-09-10"), date("2006-12-31"))
+        return {"overlaps": interval-overlaps($itv1, $itv2),
                 "overlapped-by": interval-overlapped-by($itv3, $itv4)}
-        
+
  * The expected result is:
- 
+
         { "overlaps": true, "overlapped-by": true }
 
 
@@ -144,11 +144,11 @@
 
         interval-overlapping(interval1, interval2)
 
- * This functions check whether two intervals share any points with each other. 
+ * This functions check whether two intervals share any points with each other.
  * Arguments:
     * `interval1`, `interval2`: two intervals to be compared
  * Return Value:
-   
+
     A `boolean` value. Specifically, `interval-overlapping(interval1, interval2)` is true if
 
         (interval2.start >= interval1.start
@@ -161,15 +161,15 @@
 
  * Examples:
 
-        let $itv1 := interval-from-date("2000-01-01", "2005-01-01")
-        let $itv2 := interval-from-date("2004-05-01", "2012-09-09")
-        let $itv3 := interval-from-date("2006-08-01", "2007-03-01")
-        let $itv4 := interval-from-date("2004-09-10", "2006-12-31")
-        return {"overlapping1": interval-overlapping($itv1, $itv2), 
+        let $itv1 := interval(date("2000-01-01"), date("2005-01-01"))
+        let $itv2 := interval(date("2004-05-01"), date("2012-09-09"))
+        let $itv3 := interval(date("2006-08-01"), date("2007-03-01"))
+        let $itv4 := interval(date("2004-09-10"), date("2006-12-31"))
+        return {"overlapping1": interval-overlapping($itv1, $itv2),
                 "overlapping2": interval-overlapping($itv3, $itv4)}
-        
+
  * The expected result is:
- 
+
         { "overlapping1": true, "overlapping2": true }
 
 
@@ -180,23 +180,23 @@
         interval-meets(interval1, interval2)
         interval-met-by(interval1, interval2)
 
- * These two functions check whether an interval meets with another interval. 
+ * These two functions check whether an interval meets with another interval.
  * Arguments:
     * `interval1`, `interval2`: two intervals to be compared
  * Return Value:
-   
+
     A `boolean` value. Specifically, `interval-meets(interval1, interval2)` is true if and only if `interval1.end = interval2.start`, and `interval-met-by(interval1, interval2)` is true if and only if `interval1.start = interval2.end`. If any of the two inputs is `null`, `null` is returned.
 
  * Examples:
 
-        let $itv1 := interval-from-date("2000-01-01", "2005-01-01")
-        let $itv2 := interval-from-date("2005-01-01", "2012-09-09")
-        let $itv3 := interval-from-date("2006-08-01", "2007-03-01")
-        let $itv4 := interval-from-date("2004-09-10", "2006-08-01")
+        let $itv1 := interval(date("2000-01-01"), date("2005-01-01"))
+        let $itv2 := interval(date("2005-01-01"), date("2012-09-09"))
+        let $itv3 := interval(date("2006-08-01"), date("2007-03-01"))
+        let $itv4 := interval(date("2004-09-10"), date("2006-08-01"))
         return {"meets": interval-meets($itv1, $itv2), "metby": interval-met-by($itv3, $itv4)}
 
  * The expected result is:
- 
+
         { "meets": true, "metby": true }
 
 
@@ -211,7 +211,7 @@
  * Arguments:
     * `interval1`, `interval2`: two intervals to be compared
  * Return Value:
-   
+
     A `boolean` value. Specifically, `interval-starts(interval1, interval2)` returns true if and only if
 
         interval1.start = interval2.start
@@ -226,14 +226,14 @@
 
  * Examples:
 
-        let $itv1 := interval-from-date("2000-01-01", "2005-01-01")
-        let $itv2 := interval-from-date("2000-01-01", "2012-09-09")
-        let $itv3 := interval-from-date("2006-08-01", "2007-03-01")
-        let $itv4 := interval-from-date("2006-08-01", "2006-08-01")
+        let $itv1 := interval(date("2000-01-01"), date("2005-01-01"))
+        let $itv2 := interval(date("2000-01-01"), date("2012-09-09"))
+        let $itv3 := interval(date("2006-08-01"), date("2007-03-01"))
+        let $itv4 := interval(date("2006-08-01"), date("2006-08-02"))
         return {"interval-starts": interval-starts($itv1, $itv2), "interval-started-by": interval-started-by($itv3, $itv4)}
 
  * The expected result is:
- 
+
         { "interval-starts": true, "interval-started-by": true }
 
 
@@ -248,7 +248,7 @@
  * Arguments:
     * `interval1`, `interval2`: two intervals to be compared
  * Return Value:
-   
+
     A `boolean` value. Specifically, `interval-ends(interval1, interval2)` returns true if and only if
 
         interval1.end = interval2.end
@@ -263,12 +263,12 @@
 
 * Examples:
 
-        let $itv1 := interval-from-date("2000-01-01", "2005-01-01")
-        let $itv2 := interval-from-date("1998-01-01", "2005-01-01")
-        let $itv3 := interval-from-date("2006-08-01", "2007-03-01")
-        let $itv4 := interval-from-date("2006-09-10", "2007-03-01")
+        let $itv1 := interval(date("2000-01-01"), date("2005-01-01"))
+        let $itv2 := interval(date("1998-01-01"), date("2005-01-01"))
+        let $itv3 := interval(date("2006-08-01"), date("2007-03-01"))
+        let $itv4 := interval(date("2006-09-10"), date("2007-03-01"))
         return {"interval-ends": interval-ends($itv1, $itv2), "interval-ended-by": interval-ended-by($itv3, $itv4) }
-        
+
 * The expected result is:
 
         { "interval-ends": true, "interval-ended-by": true }
diff --git a/asterix-doc/src/site/markdown/aql/datamodel.md b/asterix-doc/src/site/markdown/aql/datamodel.md
index 323e913..59ef5c9 100644
--- a/asterix-doc/src/site/markdown/aql/datamodel.md
+++ b/asterix-doc/src/site/markdown/aql/datamodel.md
@@ -293,15 +293,15 @@
 
  * Example:
 
-        let $v1 := interval-from-date(date("2013-01-01"), date("20130505"))
-        let $v2 := interval-from-time(time("00:01:01"), time("213901049+0800"))
-        let $v3 := interval-from-datetime(datetime("2013-01-01T00:01:01"), datetime("20130505T213901049+0800"))
+        let $v1 := interval(date("2013-01-01"), date("20130505"))
+        let $v2 := interval(time("00:01:01"), time("213901049+0800"))
+        let $v3 := interval(datetime("2013-01-01T00:01:01"), datetime("20130505T213901049+0800"))
         return { "v1": $v1, "v2": $v2, "v3": $v3 }
 
 
  * The expected result is:
 
-        { "v1": interval-date("2013-01-01, 2013-05-05"), "v2": interval-time("00:01:01.000Z, 13:39:01.049Z"), "v3": interval-datetime("2013-01-01T00:01:01.000Z, 2013-05-05T13:39:01.049Z") }
+        { "v1": interval(date("2013-01-01"), date("2013-05-05")), "v2": interval(time("00:01:01.000Z"), time("13:39:01.049Z")), "v3": interval(datetime("2013-01-01T00:01:01.000Z"), datetime("2013-05-05T13:39:01.049Z")) }
 
 ### <a id="PrimitiveTypesUUID">UUID</a><font size="4"><a href="#toc">[Back to TOC]</a></font> ###
 `uuid` represents a UUID value, which stands for Universally unique identifier. It is defined by a canonical format using hexadecimal text with inserted hyphen characters. (E.g.: 5a28ce1e-6a74-4201-9e8f-683256e5706f). This type is generally used to store auto-generated primary key values.
diff --git a/asterix-doc/src/site/markdown/aql/functions.md b/asterix-doc/src/site/markdown/aql/functions.md
index 1907689..4edf2b6 100644
--- a/asterix-doc/src/site/markdown/aql/functions.md
+++ b/asterix-doc/src/site/markdown/aql/functions.md
@@ -2040,11 +2040,11 @@
 
  * The expected result is:
 
-        { "overlap1": interval-time("12:23:39.000Z, 18:27:19.000Z"),
+        { "overlap1": interval(time("12:23:39.000Z"), time("18:27:19.000Z")),
           "overlap2": null,
           "overlap3": null,
-          "overlap4": interval-date("2013-01-01, 2014-01-01"),
-          "overlap5": interval-datetime("1989-03-04T12:23:39.000Z, 2000-10-30T18:27:19.000Z"),
+          "overlap4": interval(date("2013-01-01"), date("2014-01-01")),
+          "overlap5": interval(datetime("1989-03-04T12:23:39.000Z"), datetime("2000-10-30T18:27:19.000Z")),
           "overlap6": null }
 
 
@@ -2079,83 +2079,17 @@
         let $c3 := time("12:23:34.930+07:00")
 
         return { "bin1": interval-bin($c1, date("1990-01-01"), year-month-duration("P1Y")),
-         "bin2": interval-bin($c2, datetime("1990-01-01T00:00:00.000Z"), year-month-duration("P6M")),
-         "bin3": interval-bin($c3, time("00:00:00"), day-time-duration("PD1M")),
-         "bin4": interval-bin($c2, datetime("2013-01-01T00:00:00.000"), day-time-duration("PT24H"))
-       }
+          "bin2": interval-bin($c2, datetime("1990-01-01T00:00:00.000Z"), year-month-duration("P6M")),
+          "bin3": interval-bin($c3, time("00:00:00"), day-time-duration("PT1M")),
+          "bin4": interval-bin($c2, datetime("2013-01-01T00:00:00.000"), day-time-duration("PT24H"))
+        }
 
    * The expected result is:
 
-        { "bin1": interval-date("2010-01-01, 2011-01-01"),
-          "bin2": interval-datetime("-1987-07-01T00:00:00.000Z, -1986-01-01T00:00:00.000Z"),
-          "bin3": interval-time("05:23:00.000Z, 05:24:00.000Z"),
-          "bin4": interval-datetime("-1987-11-19T00:00:00.000Z, -1987-11-20T00:00:00.000Z")}
-
-
-### interval-from-date ###
- * Syntax:
-
-        interval-from-date(string1, string2)
-
- * Constructor function for the `interval` type by parsing two date strings.
- * Arguments:
-    * `string1` : The `string` value representing the starting date.
-    * `string2` : The `string` value representing the ending date.
- * Return Value:
-    * An `interval` value between the two dates.
-
- * Example:
-
-        {"date-interval": interval-from-date("2012-01-01", "2013-04-01")}
-
-
- * The expected result is:
-
-        { "date-interval": interval-date("2012-01-01, 2013-04-01") }
-
-
-### interval-from-time ###
- * Syntax:
-
-        interval-from-time(string1, string2)
-
- * Constructor function for the `interval` type by parsing two time strings.
- * Arguments:
-    * `string1` : The `string` value representing the starting time.
-    * `string2` : The `string` value representing the ending time.
- * Return Value:
-    * An `interval` value between the two times.
-
- * Example:
-
-        {"time-interval": interval-from-time("12:23:34.456Z", "233445567+0800")}
-
-
- * The expected result is:
-
-        { "time-interval": interval-time("12:23:34.456Z, 15:34:45.567Z") }
-
-
-### interval-from-datetime ###
- * Syntax:
-
-        interval-from-datetime(string1, string2)
-
- * Constructor function for `interval` type by parsing two datetime strings.
- * Arguments:
-    * `string1` : The `string` value representing the starting datetime.
-    * `string2` : The `string` value representing the ending datetime.
- * Return Value:
-    * An `interval` value between the two datetimes.
-
- * Example:
-
-        {"datetime-interval": interval-from-datetime("2012-01-01T12:23:34.456+08:00", "20130401T153445567Z")}
-
-
- * The expected result is:
-
-        { "datetime-interval": interval-datetime("2012-01-01T04:23:34.456Z, 2013-04-01T15:34:45.567Z") }
+        { "bin1": interval(date("2010-01-01"), date("2011-01-01")),
+          "bin2": interval(datetime("-1987-07-01T00:00:00.000Z"), datetime("-1986-01-01T00:00:00.000Z")),
+          "bin3": interval(time("05:23:00.000Z"), time("05:24:00.000Z")),
+          "bin4": interval(datetime("-1987-11-19T00:00:00.000Z"), datetime("-1987-11-20T00:00:00.000Z")) }
 
 
 ### interval-start-from-date/time/datetime ###
@@ -2179,7 +2113,9 @@
 
  * The expectecd result is:
 
-        { "interval1": interval-date("1984-01-01, 1985-01-01"), "interval2": interval-time("02:23:28.394Z, 05:47:28.394Z"), "interval3": interval-datetime("1999-09-09T09:09:09.999Z, 1999-12-09T09:09:09.999Z") }
+        { "interval1": interval(date("1984-01-01"), date("1985-01-01")),
+          "interval2": interval(time("02:23:28.394Z"), time("05:47:28.394Z")),
+          "interval3": interval(datetime("1999-09-09T09:09:09.999Z"), datetime("1999-12-09T09:09:09.999Z")) }
 
 
 ### overlap-bins ###
@@ -2214,9 +2150,16 @@
 
    * The expected result is:
 
-        { "timebins": [ interval-time("17:00:00.000Z, 17:30:00.000Z"), interval-time("17:30:00.000Z, 18:00:00.000Z"), interval-time("18:00:00.000Z, 18:30:00.000Z"), interval-time("18:30:00.000Z, 19:00:00.000Z") ],
-          "datebins": [ interval-date("1970-01-01, 1990-01-01"), interval-date("1990-01-01, 2010-01-01"), interval-date("2010-01-01, 2030-01-01") ],
-          "datetimebins": [ interval-datetime("1800-01-01T00:00:00.000Z, 1900-01-01T00:00:00.000Z"), interval-datetime("1900-01-01T00:00:00.000Z, 2000-01-01T00:00:00.000Z"), interval-datetime("2000-01-01T00:00:00.000Z, 2100-01-01T00:00:00.000Z") ] }
+        { "timebins": [ interval(time("17:00:00.000Z"), time("17:30:00.000Z")),
+              interval(time("17:30:00.000Z"), time("18:00:00.000Z")),
+              interval(time("18:00:00.000Z"), time("18:30:00.000Z")),
+              interval(time("18:30:00.000Z"), time("19:00:00.000Z")) ],
+          "datebins": [ interval(date("1970-01-01"), date("1990-01-01")),
+              interval(date("1990-01-01"), date("2010-01-01")),
+              interval(date("2010-01-01"), date("2030-01-01")) ],
+          "datetimebins": [ interval(datetime("1800-01-01T00:00:00.000Z"), datetime("1900-01-01T00:00:00.000Z")),
+              interval(datetime("1900-01-01T00:00:00.000Z"), datetime("2000-01-01T00:00:00.000Z")),
+              interval(datetime("2000-01-01T00:00:00.000Z"), datetime("2100-01-01T00:00:00.000Z")) ] }
 
 
 ## <a id="RecordFunctions">Record Functions</a> <font size="4"><a href="#toc">[Back to TOC]</a></font> ##
diff --git a/asterix-external-data/src/main/java/org/apache/asterix/external/parser/ADMDataParser.java b/asterix-external-data/src/main/java/org/apache/asterix/external/parser/ADMDataParser.java
index d9a93ff..0fe2758 100644
--- a/asterix-external-data/src/main/java/org/apache/asterix/external/parser/ADMDataParser.java
+++ b/asterix-external-data/src/main/java/org/apache/asterix/external/parser/ADMDataParser.java
@@ -40,7 +40,9 @@
 import org.apache.asterix.external.api.IStreamDataParser;
 import org.apache.asterix.external.util.ExternalDataUtils;
 import org.apache.asterix.om.base.ABoolean;
+import org.apache.asterix.om.base.AMutableInterval;
 import org.apache.asterix.om.base.ANull;
+import org.apache.asterix.om.base.temporal.GregorianCalendarSystem;
 import org.apache.asterix.om.types.AOrderedListType;
 import org.apache.asterix.om.types.ARecordType;
 import org.apache.asterix.om.types.ATypeTag;
@@ -53,6 +55,7 @@
 import org.apache.asterix.om.util.container.IObjectPool;
 import org.apache.asterix.om.util.container.ListObjectPool;
 import org.apache.asterix.runtime.operators.file.adm.AdmLexer;
+import org.apache.asterix.runtime.operators.file.adm.AdmLexerException;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 import org.apache.hyracks.data.std.api.IMutableValueStorage;
 import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
@@ -75,6 +78,8 @@
             new ListBuilderFactory());
     private IObjectPool<IMutableValueStorage, ATypeTag> abvsBuilderPool = new ListObjectPool<IMutableValueStorage, ATypeTag>(
             new AbvsBuilderFactory());
+
+    protected final AMutableInterval aInterval = new AMutableInterval(0L, 0L, (byte) 0);
 
     private String mismatchErrorMessage = "Mismatch Type, expecting a value of type ";
     private String mismatchErrorMessage2 = " got a value of type ";
@@ -328,44 +333,14 @@
                 parseConstructor(ATypeTag.DATETIME, objectType, out);
                 break;
             }
-            case AdmLexer.TOKEN_INTERVAL_DATE_CONS: {
+            case AdmLexer.TOKEN_INTERVAL_CONS: {
                 if (checkType(ATypeTag.INTERVAL, objectType)) {
-                    if (admLexer.next() == AdmLexer.TOKEN_CONSTRUCTOR_OPEN) {
-                        if (admLexer.next() == AdmLexer.TOKEN_STRING_LITERAL) {
-                            parseDateInterval(admLexer.getLastTokenImage(), out);
-                            if (admLexer.next() == AdmLexer.TOKEN_CONSTRUCTOR_CLOSE) {
-                                break;
-                            }
-                        }
-                    }
+                    objectType = getComplexType(objectType, ATypeTag.INTERVAL);
+                    parseInterval(ATypeTag.INTERVAL, objectType, out);
+                } else {
+                    throw new ParseException(mismatchErrorMessage + objectType.getTypeName());
                 }
-                throw new ParseException("Wrong interval data parsing for date interval.");
-            }
-            case AdmLexer.TOKEN_INTERVAL_TIME_CONS: {
-                if (checkType(ATypeTag.INTERVAL, objectType)) {
-                    if (admLexer.next() == AdmLexer.TOKEN_CONSTRUCTOR_OPEN) {
-                        if (admLexer.next() == AdmLexer.TOKEN_STRING_LITERAL) {
-                            parseTimeInterval(admLexer.getLastTokenImage(), out);
-                            if (admLexer.next() == AdmLexer.TOKEN_CONSTRUCTOR_CLOSE) {
-                                break;
-                            }
-                        }
-                    }
-                }
-                throw new ParseException("Wrong interval data parsing for time interval.");
-            }
-            case AdmLexer.TOKEN_INTERVAL_DATETIME_CONS: {
-                if (checkType(ATypeTag.INTERVAL, objectType)) {
-                    if (admLexer.next() == AdmLexer.TOKEN_CONSTRUCTOR_OPEN) {
-                        if (admLexer.next() == AdmLexer.TOKEN_STRING_LITERAL) {
-                            parseDateTimeInterval(admLexer.getLastTokenImage(), out);
-                            if (admLexer.next() == AdmLexer.TOKEN_CONSTRUCTOR_CLOSE) {
-                                break;
-                            }
-                        }
-                    }
-                }
-                throw new ParseException("Wrong interval data parsing for datetime interval.");
+                break;
             }
             case AdmLexer.TOKEN_DURATION_CONS: {
                 parseConstructor(ATypeTag.DURATION, objectType, out);
@@ -408,17 +383,16 @@
                     objectType = getComplexType(objectType, ATypeTag.UNORDEREDLIST);
                     parseUnorderedList((AUnorderedListType) objectType, out);
                 } else {
-                    throw new ParseException(mismatchErrorMessage + objectType.getTypeTag());
+                    throw new ParseException(mismatchErrorMessage + objectType.getTypeName());
                 }
                 break;
             }
-
             case AdmLexer.TOKEN_START_ORDERED_LIST: {
                 if (checkType(ATypeTag.ORDEREDLIST, objectType)) {
                     objectType = getComplexType(objectType, ATypeTag.ORDEREDLIST);
                     parseOrderedList((AOrderedListType) objectType, out);
                 } else {
-                    throw new ParseException(mismatchErrorMessage + objectType.getTypeTag());
+                    throw new ParseException(mismatchErrorMessage + objectType.getTypeName());
                 }
                 break;
             }
@@ -427,7 +401,7 @@
                     objectType = getComplexType(objectType, ATypeTag.RECORD);
                     parseRecord((ARecordType) objectType, out);
                 } else {
-                    throw new ParseException(mismatchErrorMessage + objectType.getTypeTag());
+                    throw new ParseException(mismatchErrorMessage + objectType.getTypeName());
                 }
                 break;
             }
@@ -552,7 +526,6 @@
     }
 
     private void parseRecord(ARecordType recType, DataOutput out) throws IOException {
-
         ArrayBackedValueStorage fieldValueBuffer = getTempBuffer();
         ArrayBackedValueStorage fieldNameBuffer = getTempBuffer();
         IARecordBuilder recBuilder = getRecordBuilder();
@@ -693,6 +666,100 @@
         return -1;
     }
 
+    private void parseInterval(ATypeTag typeTag, IAType objectType, DataOutput out) throws IOException {
+        long start = 0, end = 0;
+        byte tag = 0;
+        int token = admLexer.next();
+        if (token == AdmLexer.TOKEN_CONSTRUCTOR_OPEN) {
+            ATypeTag intervalType;
+
+            token = admLexer.next();
+            switch (token) {
+                case AdmLexer.TOKEN_DATE_CONS:
+                    intervalType = ATypeTag.DATE;
+                    break;
+                case AdmLexer.TOKEN_TIME_CONS:
+                    intervalType = ATypeTag.TIME;
+                    break;
+                case AdmLexer.TOKEN_DATETIME_CONS:
+                    intervalType = ATypeTag.DATETIME;
+                    break;
+                default:
+                    throw new ParseException("Unsupported interval type: " + AdmLexer.tokenKindToString(token) + ".");
+            }
+
+            // Interval
+            start = parseIntervalArgument(intervalType);
+            end = parseIntervalSecondArgument(token, intervalType);
+            tag = intervalType.serialize();
+        }
+
+        // Closing interval.
+        token = admLexer.next();
+        if (token == AdmLexer.TOKEN_CONSTRUCTOR_CLOSE) {
+            try {
+                aInterval.setValue(start, end, tag);
+            } catch (HyracksDataException e) {
+                throw new ParseException(e);
+            }
+        } else {
+            throw new ParseException("Interval was not closed.");
+        }
+        intervalSerde.serialize(aInterval, out);
+    }
+
+    private long parseIntervalSecondArgument(int startToken, ATypeTag parseType) throws IOException {
+        int token = admLexer.next();
+        if (token == AdmLexer.TOKEN_COMMA) {
+            token = admLexer.next();
+            if (token == startToken) {
+                return parseIntervalArgument(parseType);
+            } else {
+                throw new ParseException("The interval start and end point types do not match: "
+                        + AdmLexer.tokenKindToString(startToken) + " != " + AdmLexer.tokenKindToString(token));
+            }
+        } else {
+            throw new ParseException("Missing COMMA before interval end point.");
+        }
+    }
+
+    private long parseIntervalArgument(ATypeTag tag) throws IOException {
+        int token = admLexer.next();
+        if (token == AdmLexer.TOKEN_CONSTRUCTOR_OPEN) {
+            token = admLexer.next();
+            if (token == AdmLexer.TOKEN_STRING_LITERAL) {
+                long chrononTimeInMs = 0;
+                final String arg = admLexer.getLastTokenImage();
+                switch (tag) {
+                    case DATE:
+                        chrononTimeInMs += (parseDatePart(arg, 0, arg.length() - 1)
+                                / GregorianCalendarSystem.CHRONON_OF_DAY);
+                        break;
+                    case TIME:
+                        chrononTimeInMs += parseTimePart(arg, 0, arg.length() - 1);
+                        break;
+                    case DATETIME:
+                        int timeSeperatorOffsetInDatetimeString = arg.indexOf('T');
+                        if (timeSeperatorOffsetInDatetimeString < 0) {
+                            throw new ParseException(
+                                    "This can not be an instance of interval: missing T for a datetime value.");
+                        }
+                        chrononTimeInMs += parseDatePart(arg, 0, timeSeperatorOffsetInDatetimeString - 1);
+                        chrononTimeInMs += parseTimePart(arg, timeSeperatorOffsetInDatetimeString + 1,
+                                arg.length() - 1);
+                        break;
+                    default:
+                        throw new ParseException("Unsupported interval type: " + tag.name() + ".");
+                }
+                token = admLexer.next();
+                if (token == AdmLexer.TOKEN_CONSTRUCTOR_CLOSE) {
+                    return chrononTimeInMs;
+                }
+            }
+        }
+        throw new ParseException("Interval argument not properly constructed.");
+    }
+
     private void parseOrderedList(AOrderedListType oltype, DataOutput out) throws IOException {
         ArrayBackedValueStorage itemBuffer = getTempBuffer();
         OrderedListBuilder orderedListBuilder = (OrderedListBuilder) getOrderedListBuilder();
diff --git a/asterix-external-data/src/main/java/org/apache/asterix/external/parser/AbstractDataParser.java b/asterix-external-data/src/main/java/org/apache/asterix/external/parser/AbstractDataParser.java
index 20b4124..b10b9e9 100644
--- a/asterix-external-data/src/main/java/org/apache/asterix/external/parser/AbstractDataParser.java
+++ b/asterix-external-data/src/main/java/org/apache/asterix/external/parser/AbstractDataParser.java
@@ -71,7 +71,6 @@
 import org.apache.asterix.om.base.temporal.ADurationParserFactory.ADurationParseOption;
 import org.apache.asterix.om.base.temporal.ATimeParserFactory;
 import org.apache.asterix.om.base.temporal.GregorianCalendarSystem;
-import org.apache.asterix.om.types.ATypeTag;
 import org.apache.asterix.om.types.BuiltinType;
 import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
@@ -187,7 +186,7 @@
     protected final static ISerializerDeserializer<ALine> lineSerde = AqlSerializerDeserializerProvider.INSTANCE
             .getSerializerDeserializer(BuiltinType.ALINE);
     @SuppressWarnings("unchecked")
-    private static final ISerializerDeserializer<AInterval> intervalSerde = AqlSerializerDeserializerProvider.INSTANCE
+    protected static final ISerializerDeserializer<AInterval> intervalSerde = AqlSerializerDeserializerProvider.INSTANCE
             .getSerializerDeserializer(BuiltinType.AINTERVAL);
 
     protected String filename;
@@ -333,104 +332,7 @@
         binarySerde.serialize(aBinary, out);
     }
 
-    protected void parseDateTimeInterval(String interval, DataOutput out) throws HyracksDataException {
-        // the starting point for parsing (so for the accessor)
-        int startOffset = 0;
-        int endOffset, timeSeperatorOffsetInDatetimeString;
-
-        // Get the index for the comma
-        int commaIndex = interval.indexOf(',');
-        if (commaIndex < 1) {
-            throw new HyracksDataException("comma is missing for a string of interval");
-        }
-
-        endOffset = commaIndex - 1;
-        timeSeperatorOffsetInDatetimeString = interval.indexOf('T');
-
-        if (timeSeperatorOffsetInDatetimeString < 0) {
-            throw new HyracksDataException("This can not be an instance of interval: missing T for a datetime value.");
-        }
-
-        long chrononTimeInMsStart = parseDatePart(interval, startOffset, timeSeperatorOffsetInDatetimeString - 1);
-
-        chrononTimeInMsStart += parseTimePart(interval, timeSeperatorOffsetInDatetimeString + 1, endOffset);
-
-        // Interval End
-        startOffset = commaIndex + 1;
-        endOffset = interval.length() - 1;
-
-        timeSeperatorOffsetInDatetimeString = interval.indexOf('T', startOffset);
-
-        if (timeSeperatorOffsetInDatetimeString < 0) {
-            throw new HyracksDataException("This can not be an instance of interval: missing T for a datetime value.");
-        }
-
-        long chrononTimeInMsEnd = parseDatePart(interval, startOffset, timeSeperatorOffsetInDatetimeString - 1);
-
-        chrononTimeInMsEnd += parseTimePart(interval, timeSeperatorOffsetInDatetimeString + 1, endOffset);
-
-        aInterval.setValue(chrononTimeInMsStart, chrononTimeInMsEnd, ATypeTag.DATETIME.serialize());
-
-        intervalSerde.serialize(aInterval, out);
-    }
-
-    protected void parseTimeInterval(String interval, DataOutput out) throws HyracksDataException {
-        int startOffset = 0;
-        int endOffset;
-
-        // Get the index for the comma
-        int commaIndex = interval.indexOf(',');
-        if (commaIndex < 0) {
-            throw new HyracksDataException("comma is missing for a string of interval");
-        }
-
-        endOffset = commaIndex - 1;
-        // Interval Start
-        long chrononTimeInMsStart = parseTimePart(interval, startOffset, endOffset);
-
-        if (chrononTimeInMsStart < 0) {
-            chrononTimeInMsStart += GregorianCalendarSystem.CHRONON_OF_DAY;
-        }
-
-        // Interval End
-        startOffset = commaIndex + 1;
-        endOffset = interval.length() - 1;
-
-        long chrononTimeInMsEnd = parseTimePart(interval, startOffset, endOffset);
-        if (chrononTimeInMsEnd < 0) {
-            chrononTimeInMsEnd += GregorianCalendarSystem.CHRONON_OF_DAY;
-        }
-
-        aInterval.setValue(chrononTimeInMsStart, chrononTimeInMsEnd, ATypeTag.TIME.serialize());
-        intervalSerde.serialize(aInterval, out);
-    }
-
-    protected void parseDateInterval(String interval, DataOutput out) throws HyracksDataException {
-        // the starting point for parsing (so for the accessor)
-        int startOffset = 0;
-        int endOffset;
-
-        // Get the index for the comma
-        int commaIndex = interval.indexOf(',');
-        if (commaIndex < 1) {
-            throw new HyracksDataException("comma is missing for a string of interval");
-        }
-
-        endOffset = commaIndex - 1;
-        long chrononTimeInMsStart = parseDatePart(interval, startOffset, endOffset);
-
-        // Interval End
-        startOffset = commaIndex + 1;
-        endOffset = interval.length() - 1;
-
-        long chrononTimeInMsEnd = parseDatePart(interval, startOffset, endOffset);
-
-        aInterval.setValue((chrononTimeInMsStart / GregorianCalendarSystem.CHRONON_OF_DAY),
-                (chrononTimeInMsEnd / GregorianCalendarSystem.CHRONON_OF_DAY), ATypeTag.DATE.serialize());
-        intervalSerde.serialize(aInterval, out);
-    }
-
-    private long parseDatePart(String interval, int startOffset, int endOffset) throws HyracksDataException {
+    protected long parseDatePart(String interval, int startOffset, int endOffset) throws HyracksDataException {
 
         while (interval.charAt(endOffset) == '"' || interval.charAt(endOffset) == ' ') {
             endOffset--;
@@ -443,7 +345,7 @@
         return ADateParserFactory.parseDatePart(interval, startOffset, endOffset - startOffset + 1);
     }
 
-    private int parseTimePart(String interval, int startOffset, int endOffset) throws HyracksDataException {
+    protected int parseTimePart(String interval, int startOffset, int endOffset) throws HyracksDataException {
 
         while (interval.charAt(endOffset) == '"' || interval.charAt(endOffset) == ' ') {
             endOffset--;
diff --git a/asterix-external-data/src/main/resources/adm.grammar b/asterix-external-data/src/main/resources/adm.grammar
index 973c2b9..2626a31 100644
--- a/asterix-external-data/src/main/resources/adm.grammar
+++ b/asterix-external-data/src/main/resources/adm.grammar
@@ -47,9 +47,7 @@
 RECTANGLE_CONS = string(rectangle)
 CIRCLE_CONS    = string(circle)
 TIME_CONS      = string(time)
-INTERVAL_TIME_CONS      = string(interval-time)
-INTERVAL_DATE_CONS      = string(interval-date)
-INTERVAL_DATETIME_CONS  = string(interval-datetime)
+INTERVAL_CONS  = string(interval)
 YEAR_MONTH_DURATION_CONS = string(year-month-duration)
 DAY_TIME_DURATION_CONS   = string(day-time-duration)
 UUID_CONS      = string(uuid)
diff --git a/asterix-external-data/src/test/java/org/apache/asterix/runtime/operator/file/ADMDataParserTest.java b/asterix-external-data/src/test/java/org/apache/asterix/runtime/operator/file/ADMDataParserTest.java
index 698e414..c6939c9 100644
--- a/asterix-external-data/src/test/java/org/apache/asterix/runtime/operator/file/ADMDataParserTest.java
+++ b/asterix-external-data/src/test/java/org/apache/asterix/runtime/operator/file/ADMDataParserTest.java
@@ -24,7 +24,9 @@
 import java.util.concurrent.atomic.AtomicInteger;
 
 import org.apache.asterix.external.parser.ADMDataParser;
-import org.apache.asterix.om.base.AMutableInterval;
+import org.apache.asterix.om.base.AMutableDate;
+import org.apache.asterix.om.base.AMutableDateTime;
+import org.apache.asterix.om.base.AMutableTime;
 import org.junit.Assert;
 import org.junit.Test;
 
@@ -34,25 +36,23 @@
 
     @Test
     public void test() {
-        String[] dateIntervals = { "-9537-08-04, 9656-06-03", "-9537-04-04, 9656-06-04", "-9537-10-04, 9626-09-05" };
-        AMutableInterval[] parsedDateIntervals = new AMutableInterval[] {
-                new AMutableInterval(-4202630, 2807408, (byte) 17), new AMutableInterval(-4202752, 2807409, (byte) 17),
-                new AMutableInterval(-4202569, 2796544, (byte) 17), };
+        String[] dates = { "-9537-08-04", "9656-06-03", "-9537-04-04", "9656-06-04", "-9537-10-04", "9626-09-05" };
+        AMutableDate[] parsedDates = new AMutableDate[] { new AMutableDate(-4202630), new AMutableDate(2807408),
+                new AMutableDate(-4202752), new AMutableDate(2807409), new AMutableDate(-4202569),
+                new AMutableDate(2796544), };
 
-        String[] timeIntervals = { "12:04:45.689Z, 12:41:59.002Z", "12:10:45.169Z, 15:37:48.736Z",
-                "04:16:42.321Z, 12:22:56.816Z" };
-        AMutableInterval[] parsedTimeIntervals = new AMutableInterval[] {
-                new AMutableInterval(43485689, 45719002, (byte) 18),
-                new AMutableInterval(43845169, 56268736, (byte) 18),
-                new AMutableInterval(15402321, 44576816, (byte) 18), };
+        String[] times = { "12:04:45.689Z", "12:41:59.002Z", "12:10:45.169Z", "15:37:48.736Z", "04:16:42.321Z",
+                "12:22:56.816Z" };
+        AMutableTime[] parsedTimes = new AMutableTime[] { new AMutableTime(43485689), new AMutableTime(45719002),
+                new AMutableTime(43845169), new AMutableTime(56268736), new AMutableTime(15402321),
+                new AMutableTime(44576816), };
 
-        String[] dateTimeIntervals = { "-2640-10-11T17:32:15.675Z, 4104-02-01T05:59:11.902Z",
-                "0534-12-08T08:20:31.487Z, 6778-02-16T22:40:21.653Z",
-                "2129-12-12T13:18:35.758Z, 8647-07-01T13:10:19.691Z" };
-        AMutableInterval[] parsedDateTimeIntervals = new AMutableInterval[] {
-                new AMutableInterval(-145452954464325L, 67345192751902L, (byte) 16),
-                new AMutableInterval(-45286270768513L, 151729886421653L, (byte) 16),
-                new AMutableInterval(5047449515758L, 210721439419691L, (byte) 16) };
+        String[] dateTimes = { "-2640-10-11T17:32:15.675Z", "4104-02-01T05:59:11.902Z", "0534-12-08T08:20:31.487Z",
+                "6778-02-16T22:40:21.653Z", "2129-12-12T13:18:35.758Z", "8647-07-01T13:10:19.691Z" };
+        AMutableDateTime[] parsedDateTimes = new AMutableDateTime[] { new AMutableDateTime(-145452954464325L),
+                new AMutableDateTime(67345192751902L), new AMutableDateTime(-45286270768513L),
+                new AMutableDateTime(151729886421653L), new AMutableDateTime(5047449515758L),
+                new AMutableDateTime(210721439419691L) };
 
         Thread[] threads = new Thread[16];
         AtomicInteger errorCount = new AtomicInteger(0);
@@ -67,28 +67,28 @@
                     try {
                         int round = 0;
                         while (round++ < 10000) {
-                            // Test parseDateInterval.
-                            for (int index = 0; index < dateIntervals.length; ++index) {
-                                PA.invokeMethod(parser, "parseDateInterval(java.lang.String, java.io.DataOutput)",
-                                        dateIntervals[index], dos);
-                                AMutableInterval aInterval = (AMutableInterval) PA.getValue(parser, "aInterval");
-                                Assert.assertTrue(aInterval.equals(parsedDateIntervals[index]));
+                            // Test parseDate.
+                            for (int index = 0; index < dates.length; ++index) {
+                                PA.invokeMethod(parser, "parseDate(java.lang.String, java.io.DataOutput)",
+                                        dates[index], dos);
+                                AMutableDate aDate = (AMutableDate) PA.getValue(parser, "aDate");
+                                Assert.assertTrue(aDate.equals(parsedDates[index]));
                             }
 
-                            // Tests parseTimeInterval.
-                            for (int index = 0; index < timeIntervals.length; ++index) {
-                                PA.invokeMethod(parser, "parseTimeInterval(java.lang.String, java.io.DataOutput)",
-                                        timeIntervals[index], dos);
-                                AMutableInterval aInterval = (AMutableInterval) PA.getValue(parser, "aInterval");
-                                Assert.assertTrue(aInterval.equals(parsedTimeIntervals[index]));
+                            // Tests parseTime.
+                            for (int index = 0; index < times.length; ++index) {
+                                PA.invokeMethod(parser, "parseTime(java.lang.String, java.io.DataOutput)",
+                                        times[index], dos);
+                                AMutableTime aTime = (AMutableTime) PA.getValue(parser, "aTime");
+                                Assert.assertTrue(aTime.equals(parsedTimes[index]));
                             }
 
-                            // Tests parseDateTimeInterval.
-                            for (int index = 0; index < dateTimeIntervals.length; ++index) {
-                                PA.invokeMethod(parser, "parseDateTimeInterval(java.lang.String, java.io.DataOutput)",
-                                        dateTimeIntervals[index], dos);
-                                AMutableInterval aInterval = (AMutableInterval) PA.getValue(parser, "aInterval");
-                                Assert.assertTrue(aInterval.equals(parsedDateTimeIntervals[index]));
+                            // Tests parseDateTime.
+                            for (int index = 0; index < dateTimes.length; ++index) {
+                                PA.invokeMethod(parser, "parseDateTime(java.lang.String, java.io.DataOutput)",
+                                        dateTimes[index], dos);
+                                AMutableDateTime aDateTime = (AMutableDateTime) PA.getValue(parser, "aDateTime");
+                                Assert.assertTrue(aDateTime.equals(parsedDateTimes[index]));
                             }
                         }
                     } catch (Exception e) {
diff --git a/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AIntervalAscPartialBinaryComparatorFactory.java b/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AIntervalAscPartialBinaryComparatorFactory.java
index 6efc7ff..bb96d5d 100644
--- a/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AIntervalAscPartialBinaryComparatorFactory.java
+++ b/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AIntervalAscPartialBinaryComparatorFactory.java
@@ -18,7 +18,6 @@
  */
 package org.apache.asterix.dataflow.data.nontagged.comparators;
 
-import org.apache.asterix.dataflow.data.nontagged.serde.AInt64SerializerDeserializer;
 import org.apache.asterix.dataflow.data.nontagged.serde.AIntervalSerializerDeserializer;
 import org.apache.hyracks.api.dataflow.value.IBinaryComparator;
 import org.apache.hyracks.api.dataflow.value.IBinaryComparatorFactory;
@@ -45,20 +44,14 @@
                 // The ascending interval comparator sorts intervals first by start point, then by end point.
                 // If the interval have the same point values, the final comparison orders the intervals by type
                 // (datetime, date, time).
-                int c = Long.compare(
-                        AInt64SerializerDeserializer.getLong(b1,
-                                s1 + AIntervalSerializerDeserializer.getIntervalStartOffset()),
-                        AInt64SerializerDeserializer.getLong(b2,
-                                s2 + AIntervalSerializerDeserializer.getIntervalStartOffset()));
+                int c = Long.compare(AIntervalSerializerDeserializer.getIntervalStart(b1, s1),
+                        AIntervalSerializerDeserializer.getIntervalStart(b2, s2));
                 if (c == 0) {
-                    c = Long.compare(
-                            AInt64SerializerDeserializer.getLong(b1,
-                                    s1 + AIntervalSerializerDeserializer.getIntervalEndOffset()),
-                            AInt64SerializerDeserializer.getLong(b2,
-                                    s2 + AIntervalSerializerDeserializer.getIntervalEndOffset()));
+                    c = Long.compare(AIntervalSerializerDeserializer.getIntervalEnd(b1, s1),
+                            AIntervalSerializerDeserializer.getIntervalEnd(b2, s2));
                     if (c == 0) {
-                        c = Byte.compare(b1[s1 + AIntervalSerializerDeserializer.getIntervalTagOffset()], b2[s2
-                                + AIntervalSerializerDeserializer.getIntervalTagOffset()]);
+                        c = Byte.compare(AIntervalSerializerDeserializer.getIntervalTimeType(b1, s1),
+                                AIntervalSerializerDeserializer.getIntervalTimeType(b2, s2));
                     }
                 }
                 return c;
diff --git a/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AIntervalDescPartialBinaryComparatorFactory.java b/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AIntervalDescPartialBinaryComparatorFactory.java
index 9a09623..5ee553c 100644
--- a/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AIntervalDescPartialBinaryComparatorFactory.java
+++ b/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AIntervalDescPartialBinaryComparatorFactory.java
@@ -18,7 +18,6 @@
  */
 package org.apache.asterix.dataflow.data.nontagged.comparators;
 
-import org.apache.asterix.dataflow.data.nontagged.serde.AInt64SerializerDeserializer;
 import org.apache.asterix.dataflow.data.nontagged.serde.AIntervalSerializerDeserializer;
 import org.apache.hyracks.api.dataflow.value.IBinaryComparator;
 import org.apache.hyracks.api.dataflow.value.IBinaryComparatorFactory;
@@ -45,20 +44,14 @@
                 // The descending interval comparator sorts intervals first by end point, then by start point.
                 // If the interval have the same point values, the final comparison orders the intervals by type
                 // (time, date, datetime).
-                int c = Long.compare(
-                        AInt64SerializerDeserializer.getLong(b1,
-                                s1 + AIntervalSerializerDeserializer.getIntervalEndOffset()),
-                        AInt64SerializerDeserializer.getLong(b2,
-                                s2 + AIntervalSerializerDeserializer.getIntervalEndOffset()));
+                int c = Long.compare(AIntervalSerializerDeserializer.getIntervalEnd(b1, s1),
+                        AIntervalSerializerDeserializer.getIntervalEnd(b2, s2));
                 if (c == 0) {
-                    c = Long.compare(
-                            AInt64SerializerDeserializer.getLong(b1,
-                                    s1 + AIntervalSerializerDeserializer.getIntervalStartOffset()),
-                            AInt64SerializerDeserializer.getLong(b2,
-                                    s2 + AIntervalSerializerDeserializer.getIntervalStartOffset()));
+                    c = Long.compare(AIntervalSerializerDeserializer.getIntervalStart(b1, s1),
+                            AIntervalSerializerDeserializer.getIntervalStart(b2, s2));
                     if (c == 0) {
-                        c = Byte.compare(b1[s1 + AIntervalSerializerDeserializer.getIntervalTagOffset()],
-                                b2[s2 + AIntervalSerializerDeserializer.getIntervalTagOffset()]);
+                        c = Byte.compare(AIntervalSerializerDeserializer.getIntervalTimeType(b1, s1),
+                                AIntervalSerializerDeserializer.getIntervalTimeType(b2, s2));
                     }
                 }
                 // Since the comparisons are based on ascending order, the result is reversed.
diff --git a/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/adm/AIntervalPrinter.java b/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/adm/AIntervalPrinter.java
index 99c02e8..3c60cd2 100644
--- a/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/adm/AIntervalPrinter.java
+++ b/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/adm/AIntervalPrinter.java
@@ -20,9 +20,9 @@
 
 import java.io.PrintStream;
 
-import org.apache.asterix.dataflow.data.nontagged.printers.PrintTools;
-import org.apache.asterix.dataflow.data.nontagged.serde.AInt8SerializerDeserializer;
+import org.apache.asterix.dataflow.data.nontagged.serde.AIntervalSerializerDeserializer;
 import org.apache.asterix.om.types.ATypeTag;
+import org.apache.asterix.om.types.EnumDeserializer;
 import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
 import org.apache.hyracks.algebricks.data.IPrinter;
 
@@ -42,29 +42,34 @@
      */
     @Override
     public void print(byte[] b, int s, int l, PrintStream ps) throws AlgebricksException {
-        ps.print("interval");
+        ps.print("interval(");
 
-        short typetag = AInt8SerializerDeserializer.getByte(b, s + 1 + 8 * 2);
+        byte typetag = AIntervalSerializerDeserializer.getIntervalTimeType(b, s + 1);
+        int startOffset = AIntervalSerializerDeserializer.getIntervalStartOffset(b, s + 1) - 1;
+        int startSize = AIntervalSerializerDeserializer.getStartSize(b, s + 1);
+        int endOffset = AIntervalSerializerDeserializer.getIntervalEndOffset(b, s + 1) - 1;
+        int endSize = AIntervalSerializerDeserializer.getEndSize(b, s + 1);
 
-        if (typetag == ATypeTag.DATE.serialize()) {
-            ps.print("-date(\"");
-            PrintTools.printDateString(b, s + 4, 4, ps);
-            ps.print(", ");
-            PrintTools.printDateString(b, s + 12, 4, ps);
-        } else if (typetag == ATypeTag.TIME.serialize()) {
-            ps.print("-time(\"");
-            PrintTools.printTimeString(b, s + 4, 4, ps);
-            ps.print(", ");
-            PrintTools.printTimeString(b, s + 12, 4, ps);
-        } else if (typetag == ATypeTag.DATETIME.serialize()) {
-            ps.print("-datetime(\"");
-            PrintTools.printDateTimeString(b, s, 8, ps);
-            ps.print(", ");
-            PrintTools.printDateTimeString(b, s + 8, 8, ps);
-        } else {
-            throw new AlgebricksException("Unsupport internal time types in interval: " + typetag);
+        IPrinter timeInstancePrinter;
+        ATypeTag intervalType = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(typetag);
+        switch (intervalType) {
+            case DATE:
+                timeInstancePrinter = ADatePrinter.INSTANCE;
+                break;
+            case TIME:
+                timeInstancePrinter = ATimePrinter.INSTANCE;
+                break;
+            case DATETIME:
+                timeInstancePrinter = ADateTimePrinter.INSTANCE;
+                break;
+            default:
+                throw new AlgebricksException("Unsupport internal time types in interval: " + typetag);
         }
 
-        ps.print("\")");
+        timeInstancePrinter.print(b, startOffset, startSize, ps);
+        ps.print(", ");
+        timeInstancePrinter.print(b, endOffset, endSize, ps);
+
+        ps.print(")");
     }
 }
diff --git a/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/clean/AIntervalPrinter.java b/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/clean/AIntervalPrinter.java
index e77ef94..3f8a647 100644
--- a/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/clean/AIntervalPrinter.java
+++ b/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/clean/AIntervalPrinter.java
@@ -20,8 +20,12 @@
 
 import java.io.PrintStream;
 
-import org.apache.asterix.dataflow.data.nontagged.serde.AInt8SerializerDeserializer;
+import org.apache.asterix.dataflow.data.nontagged.printers.adm.ADatePrinter;
+import org.apache.asterix.dataflow.data.nontagged.printers.adm.ADateTimePrinter;
+import org.apache.asterix.dataflow.data.nontagged.printers.adm.ATimePrinter;
+import org.apache.asterix.dataflow.data.nontagged.serde.AIntervalSerializerDeserializer;
 import org.apache.asterix.om.types.ATypeTag;
+import org.apache.asterix.om.types.EnumDeserializer;
 import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
 import org.apache.hyracks.algebricks.data.IPrinter;
 
@@ -43,29 +47,32 @@
     public void print(byte[] b, int s, int l, PrintStream ps) throws AlgebricksException {
         ps.print("{ \"interval\": { \"start\": ");
 
-        short typetag = AInt8SerializerDeserializer.getByte(b, s + 1 + 8 * 2);
+        byte typetag = AIntervalSerializerDeserializer.getIntervalTimeType(b, s + 1);
+        int startOffset = AIntervalSerializerDeserializer.getIntervalStartOffset(b, s + 1) - 1;
+        int startSize = AIntervalSerializerDeserializer.getStartSize(b, s + 1);
+        int endOffset = AIntervalSerializerDeserializer.getIntervalEndOffset(b, s + 1) - 1;
+        int endSize = AIntervalSerializerDeserializer.getEndSize(b, s + 1);
 
         IPrinter timeInstancePrinter;
-
-        if (typetag == ATypeTag.DATE.serialize()) {
-            timeInstancePrinter = ADatePrinter.INSTANCE;
-            ((ADatePrinter) timeInstancePrinter).print(b, s + 4, 4, ps);
-            ps.print(", \"end\": ");
-            ((ADatePrinter) timeInstancePrinter).print(b, s + 12, 4, ps);
-        } else if (typetag == ATypeTag.TIME.serialize()) {
-            timeInstancePrinter = ATimePrinter.INSTANCE;
-            ((ATimePrinter) timeInstancePrinter).print(b, s + 4, 4, ps);
-            ps.print(", \"end\": ");
-            ((ATimePrinter) timeInstancePrinter).print(b, s + 12, 4, ps);
-        } else if (typetag == ATypeTag.DATETIME.serialize()) {
-            timeInstancePrinter = ADateTimePrinter.INSTANCE;
-            ((ADateTimePrinter) timeInstancePrinter).print(b, s, 8, ps);
-            ps.print(", \"end\": ");
-            ((ADateTimePrinter) timeInstancePrinter).print(b, s + 8, 8, ps);
-        } else {
-            throw new AlgebricksException("Unsupport internal time types in interval: " + typetag);
+        ATypeTag intervalType = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(typetag);
+        switch (intervalType) {
+            case DATE:
+                timeInstancePrinter = ADatePrinter.INSTANCE;
+                break;
+            case TIME:
+                timeInstancePrinter = ATimePrinter.INSTANCE;
+                break;
+            case DATETIME:
+                timeInstancePrinter = ADateTimePrinter.INSTANCE;
+                break;
+            default:
+                throw new AlgebricksException("Unsupport internal time types in interval: " + typetag);
         }
 
+        timeInstancePrinter.print(b, startOffset, startSize, ps);
+        ps.print(", \"end\": ");
+        timeInstancePrinter.print(b, endOffset, endSize, ps);
+
         ps.print("}}");
     }
 }
diff --git a/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/lossless/AIntervalPrinter.java b/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/lossless/AIntervalPrinter.java
index 7727f92..84bf23c 100644
--- a/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/lossless/AIntervalPrinter.java
+++ b/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/lossless/AIntervalPrinter.java
@@ -20,8 +20,12 @@
 
 import java.io.PrintStream;
 
-import org.apache.asterix.dataflow.data.nontagged.serde.AInt8SerializerDeserializer;
+import org.apache.asterix.dataflow.data.nontagged.printers.adm.ADatePrinter;
+import org.apache.asterix.dataflow.data.nontagged.printers.adm.ADateTimePrinter;
+import org.apache.asterix.dataflow.data.nontagged.printers.adm.ATimePrinter;
+import org.apache.asterix.dataflow.data.nontagged.serde.AIntervalSerializerDeserializer;
 import org.apache.asterix.om.types.ATypeTag;
+import org.apache.asterix.om.types.EnumDeserializer;
 import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
 import org.apache.hyracks.algebricks.data.IPrinter;
 
@@ -43,29 +47,32 @@
     public void print(byte[] b, int s, int l, PrintStream ps) throws AlgebricksException {
         ps.print("{ \"interval\": { \"start\": ");
 
-        short typetag = AInt8SerializerDeserializer.getByte(b, s + 1 + 8 * 2);
+        byte typetag = AIntervalSerializerDeserializer.getIntervalTimeType(b, s + 1);
+        int startOffset = AIntervalSerializerDeserializer.getIntervalStartOffset(b, s + 1) - 1;
+        int startSize = AIntervalSerializerDeserializer.getStartSize(b, s + 1);
+        int endOffset = AIntervalSerializerDeserializer.getIntervalEndOffset(b, s + 1) - 1;
+        int endSize = AIntervalSerializerDeserializer.getEndSize(b, s + 1);
 
         IPrinter timeInstancePrinter;
-
-        if (typetag == ATypeTag.DATE.serialize()) {
-            timeInstancePrinter = ADatePrinter.INSTANCE;
-            ((ADatePrinter) timeInstancePrinter).print(b, s + 4, 4, ps);
-            ps.print(", \"end\": ");
-            ((ADatePrinter) timeInstancePrinter).print(b, s + 12, 4, ps);
-        } else if (typetag == ATypeTag.TIME.serialize()) {
-            timeInstancePrinter = ATimePrinter.INSTANCE;
-            ((ATimePrinter) timeInstancePrinter).print(b, s + 4, 4, ps);
-            ps.print(", \"end\": ");
-            ((ATimePrinter) timeInstancePrinter).print(b, s + 12, 4, ps);
-        } else if (typetag == ATypeTag.DATETIME.serialize()) {
-            timeInstancePrinter = ADateTimePrinter.INSTANCE;
-            ((ADateTimePrinter) timeInstancePrinter).print(b, s, 8, ps);
-            ps.print(", \"end\": ");
-            ((ADateTimePrinter) timeInstancePrinter).print(b, s + 8, 8, ps);
-        } else {
-            throw new AlgebricksException("Unsupport internal time types in interval: " + typetag);
+        ATypeTag intervalType = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(typetag);
+        switch (intervalType) {
+            case DATE:
+                timeInstancePrinter = ADatePrinter.INSTANCE;
+                break;
+            case TIME:
+                timeInstancePrinter = ATimePrinter.INSTANCE;
+                break;
+            case DATETIME:
+                timeInstancePrinter = ADateTimePrinter.INSTANCE;
+                break;
+            default:
+                throw new AlgebricksException("Unsupport internal time types in interval: " + typetag);
         }
 
+        timeInstancePrinter.print(b, startOffset, startSize, ps);
+        ps.print(", \"end\": ");
+        timeInstancePrinter.print(b, endOffset, endSize, ps);
+
         ps.print("}}");
     }
 }
diff --git a/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AIntervalSerializerDeserializer.java b/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AIntervalSerializerDeserializer.java
index 94a8917..d5b6488 100644
--- a/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AIntervalSerializerDeserializer.java
+++ b/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AIntervalSerializerDeserializer.java
@@ -23,16 +23,26 @@
 import java.io.IOException;
 
 import org.apache.asterix.om.base.AInterval;
+import org.apache.asterix.om.types.ATypeTag;
 import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.data.std.primitive.BytePointable;
+import org.apache.hyracks.data.std.primitive.IntegerPointable;
+import org.apache.hyracks.data.std.primitive.LongPointable;
 
+/*
+ * This class serializes and de-serializes the binary data representation of an interval.
+ *
+ * Interval {
+ *   byte type;
+ *   T start;
+ *   T end;
+ *
+ * T can be of type date, time or datetime.
+ */
 public class AIntervalSerializerDeserializer implements ISerializerDeserializer<AInterval> {
 
     private static final long serialVersionUID = 1L;
-
-    private static final int INTERVAL_START_POINT_OFFSET = 0;
-    private static final int INTERVAL_END_POINT_OFFSET = INTERVAL_START_POINT_OFFSET + Long.BYTES;
-    private static final int INTERVAL_TAG_OFFSET = INTERVAL_END_POINT_OFFSET + Long.BYTES;
 
     public static final AIntervalSerializerDeserializer INSTANCE = new AIntervalSerializerDeserializer();
 
@@ -42,7 +52,16 @@
     @Override
     public AInterval deserialize(DataInput in) throws HyracksDataException {
         try {
-            return new AInterval(in.readLong(), in.readLong(), in.readByte());
+            byte tag = in.readByte();
+            long start = 0, end = 0;
+            if (tag == ATypeTag.DATETIME.serialize()) {
+                start = in.readLong();
+                end = in.readLong();
+            } else {
+                start = in.readInt();
+                end = in.readInt();
+            }
+            return new AInterval(start, end, tag);
         } catch (IOException e) {
             throw new HyracksDataException(e);
         }
@@ -52,36 +71,75 @@
     @Override
     public void serialize(AInterval instance, DataOutput out) throws HyracksDataException {
         try {
-            out.writeLong(instance.getIntervalStart());
-            out.writeLong(instance.getIntervalEnd());
             out.writeByte(instance.getIntervalType());
+            if (instance.getIntervalType() == ATypeTag.DATETIME.serialize()) {
+                out.writeLong(instance.getIntervalStart());
+                out.writeLong(instance.getIntervalEnd());
+            } else {
+                out.writeInt((int) instance.getIntervalStart());
+                out.writeInt((int) instance.getIntervalEnd());
+            }
         } catch (IOException e) {
             throw new HyracksDataException(e);
         }
     }
 
-    public static long getIntervalStart(byte[] data, int offset) {
-        return AInt64SerializerDeserializer.getLong(data, offset + getIntervalStartOffset());
+    public static byte getIntervalTimeType(byte[] data, int start) {
+        return BytePointable.getByte(data, getIntervalTypeOffset(data, start));
     }
 
-    public static long getIntervalEnd(byte[] data, int offset) {
-        return AInt64SerializerDeserializer.getLong(data, offset + getIntervalEndOffset());
+    public static int getIntervalTypeOffset(byte[] data, int start) {
+        return start;
     }
 
-    public static int getIntervalStartOffset() {
-        return INTERVAL_START_POINT_OFFSET;
+    public static int getTypeSize() {
+        return Byte.BYTES;
     }
 
-    public static int getIntervalEndOffset() {
-        return INTERVAL_END_POINT_OFFSET;
+    public static long getIntervalStart(byte[] data, int start) {
+        if (getIntervalTimeType(data, start) == ATypeTag.DATETIME.serialize()) {
+            return LongPointable.getLong(data, getIntervalStartOffset(data, start));
+        } else {
+            return IntegerPointable.getInteger(data, getIntervalStartOffset(data, start));
+        }
     }
 
-    public static int getIntervalTagOffset() {
-        return INTERVAL_TAG_OFFSET;
+    public static int getIntervalStartOffset(byte[] data, int start) {
+        int offset = getIntervalTypeOffset(data, start) + getTypeSize();
+        return offset;
     }
 
-    public static byte getIntervalTimeType(byte[] data, int offset) {
-        return data[offset + 8 * 2];
+    public static int getStartSize(byte[] data, int start) {
+        if (getIntervalTimeType(data, start) == ATypeTag.DATETIME.serialize()) {
+            return Long.BYTES;
+        } else {
+            return Integer.BYTES;
+        }
+    }
+
+    public static long getIntervalEnd(byte[] data, int start) {
+        if (getIntervalTimeType(data, start) == ATypeTag.DATETIME.serialize()) {
+            return LongPointable.getLong(data, getIntervalEndOffset(data, start));
+        } else {
+            return IntegerPointable.getInteger(data, getIntervalEndOffset(data, start));
+        }
+    }
+
+    public static int getIntervalEndOffset(byte[] data, int start) {
+        int offset = getIntervalStartOffset(data, start) + getStartSize(data, start);
+        return offset;
+    }
+
+    public static int getEndSize(byte[] data, int start) {
+        if (getIntervalTimeType(data, start) == ATypeTag.DATETIME.serialize()) {
+            return Long.BYTES;
+        } else {
+            return Integer.BYTES;
+        }
+    }
+
+    public static int getIntervalLength(byte[] data, int start) {
+        return getTypeSize() + getStartSize(data, start) + getEndSize(data, start);
     }
 
 }
diff --git a/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AOrderedListSerializerDeserializer.java b/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AOrderedListSerializerDeserializer.java
index 0004977..fba898d 100644
--- a/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AOrderedListSerializerDeserializer.java
+++ b/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AOrderedListSerializerDeserializer.java
@@ -67,21 +67,7 @@
     @Override
     public AOrderedList deserialize(DataInput in) throws HyracksDataException {
         try {
-            boolean fixedSize = false;
             ATypeTag typeTag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(in.readByte());
-            switch (typeTag) {
-                case STRING:
-                case BINARY:
-                case RECORD:
-                case ORDEREDLIST:
-                case UNORDEREDLIST:
-                case ANY:
-                    fixedSize = false;
-                    break;
-                default:
-                    fixedSize = true;
-                    break;
-            }
 
             IAType currentItemType = itemType;
             @SuppressWarnings("rawtypes")
@@ -97,7 +83,7 @@
             int numberOfitems;
             numberOfitems = in.readInt();
             if (numberOfitems > 0) {
-                if (!fixedSize) {
+                if (!NonTaggedFormatUtil.isFixedSizedCollection(currentItemType)) {
                     for (int i = 0; i < numberOfitems; i++)
                         in.readInt();
                 }
@@ -147,17 +133,11 @@
     public static int getItemOffset(byte[] serOrderedList, int offset, int itemIndex) throws AsterixException {
         if (serOrderedList[offset] == ATypeTag.ORDEREDLIST.serialize()) {
             ATypeTag typeTag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(serOrderedList[offset + 1]);
-            switch (typeTag) {
-                case STRING:
-                case BINARY:
-                case RECORD:
-                case ORDEREDLIST:
-                case UNORDEREDLIST:
-                case ANY:
-                    return offset + AInt32SerializerDeserializer.getInt(serOrderedList, offset + 10 + (4 * itemIndex));
-                default:
-                    int length = NonTaggedFormatUtil.getFieldValueLength(serOrderedList, offset + 1, typeTag, true);
-                    return offset + 10 + (length * itemIndex);
+            if (NonTaggedFormatUtil.isFixedSizedCollection(typeTag)) {
+                int length = NonTaggedFormatUtil.getFieldValueLength(serOrderedList, offset + 1, typeTag, true);
+                return offset + 10 + (length * itemIndex);
+            } else {
+                return offset + AInt32SerializerDeserializer.getInt(serOrderedList, offset + 10 + (4 * itemIndex));
             }
             // 10 = tag (1) + itemTag (1) + list size (4) + number of items (4)
         } else
diff --git a/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AUnorderedListSerializerDeserializer.java b/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AUnorderedListSerializerDeserializer.java
index 87e2ab7..9475e6a 100644
--- a/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AUnorderedListSerializerDeserializer.java
+++ b/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AUnorderedListSerializerDeserializer.java
@@ -69,21 +69,7 @@
     public AUnorderedList deserialize(DataInput in) throws HyracksDataException {
         // TODO: schemaless unordered list deserializer
         try {
-            boolean fixedSize = false;
             ATypeTag typeTag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(in.readByte());
-            switch (typeTag) {
-                case STRING:
-                case BINARY:
-                case RECORD:
-                case ORDEREDLIST:
-                case UNORDEREDLIST:
-                case ANY:
-                    fixedSize = false;
-                    break;
-                default:
-                    fixedSize = true;
-                    break;
-            }
 
             IAType currentItemType = itemType;
             @SuppressWarnings("rawtypes")
@@ -99,7 +85,7 @@
             numberOfitems = in.readInt();
             ArrayList<IAObject> items = new ArrayList<IAObject>();
             if (numberOfitems > 0) {
-                if (!fixedSize) {
+                if (!NonTaggedFormatUtil.isFixedSizedCollection(currentItemType)) {
                     for (int i = 0; i < numberOfitems; i++)
                         in.readInt();
                 }
@@ -149,17 +135,11 @@
     public static int getItemOffset(byte[] serOrderedList, int offset, int itemIndex) throws AsterixException {
         if (serOrderedList[offset] == ATypeTag.UNORDEREDLIST.serialize()) {
             ATypeTag typeTag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(serOrderedList[offset + 1]);
-            switch (typeTag) {
-                case STRING:
-                case BINARY:
-                case RECORD:
-                case ORDEREDLIST:
-                case UNORDEREDLIST:
-                case ANY:
-                    return offset + AInt32SerializerDeserializer.getInt(serOrderedList, offset + 10 + (4 * itemIndex));
-                default:
-                    int length = NonTaggedFormatUtil.getFieldValueLength(serOrderedList, offset + 1, typeTag, true);
-                    return offset + 10 + (length * itemIndex);
+            if (NonTaggedFormatUtil.isFixedSizedCollection(typeTag)) {
+                int length = NonTaggedFormatUtil.getFieldValueLength(serOrderedList, offset + 1, typeTag, true);
+                return offset + 10 + (length * itemIndex);
+            } else {
+                return offset + AInt32SerializerDeserializer.getInt(serOrderedList, offset + 10 + (4 * itemIndex));
             }
             // 10 = tag (1) + itemTag (1) + list size (4) + number of items (4)
         } else
diff --git a/asterix-om/src/main/java/org/apache/asterix/om/functions/AsterixBuiltinFunctions.java b/asterix-om/src/main/java/org/apache/asterix/om/functions/AsterixBuiltinFunctions.java
index 7b8a9fa..f1b0e67 100644
--- a/asterix-om/src/main/java/org/apache/asterix/om/functions/AsterixBuiltinFunctions.java
+++ b/asterix-om/src/main/java/org/apache/asterix/om/functions/AsterixBuiltinFunctions.java
@@ -508,12 +508,8 @@
     public final static FunctionIdentifier DAY_TIME_DURATION_CONSTRUCTOR = new FunctionIdentifier(
             FunctionConstants.ASTERIX_NS, "day-time-duration", 1);
 
-    public final static FunctionIdentifier INTERVAL_CONSTRUCTOR_DATE = new FunctionIdentifier(
-            FunctionConstants.ASTERIX_NS, "interval-from-date", 2);
-    public final static FunctionIdentifier INTERVAL_CONSTRUCTOR_TIME = new FunctionIdentifier(
-            FunctionConstants.ASTERIX_NS, "interval-from-time", 2);
-    public final static FunctionIdentifier INTERVAL_CONSTRUCTOR_DATETIME = new FunctionIdentifier(
-            FunctionConstants.ASTERIX_NS, "interval-from-datetime", 2);
+    public final static FunctionIdentifier INTERVAL_CONSTRUCTOR = new FunctionIdentifier(
+            FunctionConstants.ASTERIX_NS, "interval", 2);
     public final static FunctionIdentifier INTERVAL_CONSTRUCTOR_START_FROM_DATE = new FunctionIdentifier(
             FunctionConstants.ASTERIX_NS, "interval-start-from-date", 2);
     public final static FunctionIdentifier INTERVAL_CONSTRUCTOR_START_FROM_TIME = new FunctionIdentifier(
@@ -1026,9 +1022,7 @@
         addFunction(DURATION_FROM_INTERVAL, OptionalADayTimeDurationTypeComputer.INSTANCE, true);
 
         // interval constructors
-        addFunction(INTERVAL_CONSTRUCTOR_DATE, OptionalAIntervalTypeComputer.INSTANCE, true);
-        addFunction(INTERVAL_CONSTRUCTOR_TIME, OptionalAIntervalTypeComputer.INSTANCE, true);
-        addFunction(INTERVAL_CONSTRUCTOR_DATETIME, OptionalAIntervalTypeComputer.INSTANCE, true);
+        addFunction(INTERVAL_CONSTRUCTOR, OptionalAIntervalTypeComputer.INSTANCE, true);
         addFunction(INTERVAL_CONSTRUCTOR_START_FROM_DATE, OptionalAIntervalTypeComputer.INSTANCE, true);
         addFunction(INTERVAL_CONSTRUCTOR_START_FROM_DATETIME, OptionalAIntervalTypeComputer.INSTANCE, true);
         addFunction(INTERVAL_CONSTRUCTOR_START_FROM_TIME, OptionalAIntervalTypeComputer.INSTANCE, true);
diff --git a/asterix-om/src/main/java/org/apache/asterix/om/pointables/AListVisitablePointable.java b/asterix-om/src/main/java/org/apache/asterix/om/pointables/AListVisitablePointable.java
index 42371ea..2f7d9af 100644
--- a/asterix-om/src/main/java/org/apache/asterix/om/pointables/AListVisitablePointable.java
+++ b/asterix-om/src/main/java/org/apache/asterix/om/pointables/AListVisitablePointable.java
@@ -101,19 +101,9 @@
 
         int numberOfitems = AInt32SerializerDeserializer.getInt(b, s + 6);
         int itemOffset;
-        if (typedItemList) {
-            switch (itemTag) {
-                case STRING:
-                case BINARY:
-                case RECORD:
-                case ORDEREDLIST:
-                case UNORDEREDLIST:
-                case ANY:
-                    itemOffset = s + 10 + (numberOfitems * 4);
-                    break;
-                default:
-                    itemOffset = s + 10;
-            }
+
+        if (typedItemList && NonTaggedFormatUtil.isFixedSizedCollection(itemTag)) {
+            itemOffset = s + 10;
         } else {
             itemOffset = s + 10 + (numberOfitems * 4);
         }
diff --git a/asterix-om/src/main/java/org/apache/asterix/om/pointables/printer/json/clean/APrintVisitor.java b/asterix-om/src/main/java/org/apache/asterix/om/pointables/printer/json/clean/APrintVisitor.java
index 734319a..2f8e5f9 100644
--- a/asterix-om/src/main/java/org/apache/asterix/om/pointables/printer/json/clean/APrintVisitor.java
+++ b/asterix-om/src/main/java/org/apache/asterix/om/pointables/printer/json/clean/APrintVisitor.java
@@ -34,6 +34,7 @@
 import org.apache.asterix.dataflow.data.nontagged.printers.json.clean.AInt32Printer;
 import org.apache.asterix.dataflow.data.nontagged.printers.json.clean.AInt64Printer;
 import org.apache.asterix.dataflow.data.nontagged.printers.json.clean.AInt8Printer;
+import org.apache.asterix.dataflow.data.nontagged.printers.json.clean.AIntervalPrinter;
 import org.apache.asterix.dataflow.data.nontagged.printers.json.clean.ALinePrinter;
 import org.apache.asterix.dataflow.data.nontagged.printers.json.clean.ANullPrinter;
 import org.apache.asterix.dataflow.data.nontagged.printers.json.clean.APoint3DPrinter;
@@ -154,6 +155,10 @@
                     ADurationPrinter.INSTANCE.print(b, s, l, ps);
                     break;
                 }
+                case INTERVAL: {
+                    AIntervalPrinter.INSTANCE.print(b, s, l, ps);
+                    break;
+                }
                 case POINT: {
                     APointPrinter.INSTANCE.print(b, s, l, ps);
                     break;
diff --git a/asterix-om/src/main/java/org/apache/asterix/om/pointables/printer/json/lossless/APrintVisitor.java b/asterix-om/src/main/java/org/apache/asterix/om/pointables/printer/json/lossless/APrintVisitor.java
index d291d33..3d8958a 100644
--- a/asterix-om/src/main/java/org/apache/asterix/om/pointables/printer/json/lossless/APrintVisitor.java
+++ b/asterix-om/src/main/java/org/apache/asterix/om/pointables/printer/json/lossless/APrintVisitor.java
@@ -34,6 +34,7 @@
 import org.apache.asterix.dataflow.data.nontagged.printers.json.lossless.AInt32Printer;
 import org.apache.asterix.dataflow.data.nontagged.printers.json.lossless.AInt64Printer;
 import org.apache.asterix.dataflow.data.nontagged.printers.json.lossless.AInt8Printer;
+import org.apache.asterix.dataflow.data.nontagged.printers.json.lossless.AIntervalPrinter;
 import org.apache.asterix.dataflow.data.nontagged.printers.json.lossless.ALinePrinter;
 import org.apache.asterix.dataflow.data.nontagged.printers.json.lossless.ANullPrinter;
 import org.apache.asterix.dataflow.data.nontagged.printers.json.lossless.APoint3DPrinter;
@@ -154,6 +155,10 @@
                     ADurationPrinter.INSTANCE.print(b, s, l, ps);
                     break;
                 }
+                case INTERVAL: {
+                    AIntervalPrinter.INSTANCE.print(b, s, l, ps);
+                    break;
+                }
                 case POINT: {
                     APointPrinter.INSTANCE.print(b, s, l, ps);
                     break;
diff --git a/asterix-om/src/main/java/org/apache/asterix/om/util/NonTaggedFormatUtil.java b/asterix-om/src/main/java/org/apache/asterix/om/util/NonTaggedFormatUtil.java
index 6377bcc..c24ce45 100644
--- a/asterix-om/src/main/java/org/apache/asterix/om/util/NonTaggedFormatUtil.java
+++ b/asterix-om/src/main/java/org/apache/asterix/om/util/NonTaggedFormatUtil.java
@@ -23,6 +23,7 @@
 import org.apache.asterix.common.config.DatasetConfig.IndexType;
 import org.apache.asterix.common.exceptions.AsterixException;
 import org.apache.asterix.dataflow.data.nontagged.serde.AInt16SerializerDeserializer;
+import org.apache.asterix.dataflow.data.nontagged.serde.AIntervalSerializerDeserializer;
 import org.apache.asterix.dataflow.data.nontagged.serde.AOrderedListSerializerDeserializer;
 import org.apache.asterix.dataflow.data.nontagged.serde.ARecordSerializerDeserializer;
 import org.apache.asterix.dataflow.data.nontagged.serde.AUnorderedListSerializerDeserializer;
@@ -48,19 +49,27 @@
 
     public static final boolean isFixedSizedCollection(IAType type) {
         switch (type.getTypeTag()) {
-            case STRING:
-            case BINARY:
-            case RECORD:
-            case ORDEREDLIST:
-            case UNORDEREDLIST:
-            case POLYGON:
-            case ANY:
-                return false;
             case UNION:
                 if (!((AUnionType) type).isNullableType())
                     return false;
                 else
                     return isFixedSizedCollection(((AUnionType) type).getNullableType());
+            default:
+                return isFixedSizedCollection(type.getTypeTag());
+        }
+    }
+
+    public static final boolean isFixedSizedCollection(ATypeTag type) {
+        switch (type) {
+            case STRING:
+            case BINARY:
+            case RECORD:
+            case INTERVAL:
+            case ORDEREDLIST:
+            case UNORDEREDLIST:
+            case POLYGON:
+            case ANY:
+                return false;
             default:
                 return true;
         }
@@ -130,7 +139,10 @@
             case UUID:
                 return 16;
             case INTERVAL:
-                return 17;
+                if (tagged)
+                    return AIntervalSerializerDeserializer.getIntervalLength(serNonTaggedAObject, offset + 1);
+                else
+                    return AIntervalSerializerDeserializer.getIntervalLength(serNonTaggedAObject, offset);
             case POINT3D:
             case CIRCLE:
                 return 24;
diff --git a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AIntervalFromDateConstructorDescriptor.java b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AIntervalConstructorDescriptor.java
similarity index 66%
rename from asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AIntervalFromDateConstructorDescriptor.java
rename to asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AIntervalConstructorDescriptor.java
index ecfed56..a342b70 100644
--- a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AIntervalFromDateConstructorDescriptor.java
+++ b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AIntervalConstructorDescriptor.java
@@ -22,12 +22,12 @@
 import java.io.IOException;
 
 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.formats.nontagged.AqlSerializerDeserializerProvider;
 import org.apache.asterix.om.base.AInterval;
 import org.apache.asterix.om.base.AMutableInterval;
 import org.apache.asterix.om.base.ANull;
-import org.apache.asterix.om.base.temporal.ADateParserFactory;
-import org.apache.asterix.om.base.temporal.GregorianCalendarSystem;
 import org.apache.asterix.om.functions.AsterixBuiltinFunctions;
 import org.apache.asterix.om.functions.IFunctionDescriptor;
 import org.apache.asterix.om.functions.IFunctionDescriptorFactory;
@@ -41,17 +41,16 @@
 import org.apache.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
 import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
 import org.apache.hyracks.data.std.api.IDataOutputProvider;
-import org.apache.hyracks.data.std.primitive.UTF8StringPointable;
 import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
 import org.apache.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
 
-public class AIntervalFromDateConstructorDescriptor extends AbstractScalarFunctionDynamicDescriptor {
+public class AIntervalConstructorDescriptor extends AbstractScalarFunctionDynamicDescriptor {
     private static final long serialVersionUID = 1L;
-    public final static FunctionIdentifier FID = AsterixBuiltinFunctions.INTERVAL_CONSTRUCTOR_DATE;
+    public final static FunctionIdentifier FID = AsterixBuiltinFunctions.INTERVAL_CONSTRUCTOR;
     public static final IFunctionDescriptorFactory FACTORY = new IFunctionDescriptorFactory() {
         @Override
         public IFunctionDescriptor createFunctionDescriptor() {
-            return new AIntervalFromDateConstructorDescriptor();
+            return new AIntervalConstructorDescriptor();
         }
     };
 
@@ -65,13 +64,11 @@
                 return new ICopyEvaluator() {
 
                     private DataOutput out = output.getDataOutput();
-
                     private ArrayBackedValueStorage argOut0 = new ArrayBackedValueStorage();
                     private ArrayBackedValueStorage argOut1 = new ArrayBackedValueStorage();
                     private ICopyEvaluator eval0 = args[0].createEvaluator(argOut0);
                     private ICopyEvaluator eval1 = args[1].createEvaluator(argOut1);
-                    private String errorMessage = "This can not be an instance of interval (from Date)";
-                    //TODO: Where to move and fix these?
+                    private String errorMessage = "This can not be an instance of interval (only support Date/Time/Datetime)";
                     private AMutableInterval aInterval = new AMutableInterval(0L, 0L, (byte) 0);
                     @SuppressWarnings("unchecked")
                     private ISerializerDeserializer<AInterval> intervalSerde = AqlSerializerDeserializerProvider.INSTANCE
@@ -79,7 +76,6 @@
                     @SuppressWarnings("unchecked")
                     private ISerializerDeserializer<ANull> nullSerde = AqlSerializerDeserializerProvider.INSTANCE
                             .getSerializerDeserializer(BuiltinType.ANULL);
-                    private final UTF8StringPointable utf8Ptr = new UTF8StringPointable();
 
                     @Override
                     public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
@@ -97,34 +93,38 @@
                                 return;
                             }
 
-                            long intervalStart = 0, intervalEnd = 0;
-
-                            if (argOut0.getByteArray()[0] == ATypeTag.SERIALIZED_DATE_TYPE_TAG) {
-                                intervalStart = ADateSerializerDeserializer.getChronon(argOut0.getByteArray(), 1);
-                            } else if (argOut0.getByteArray()[0] == ATypeTag.SERIALIZED_STRING_TYPE_TAG) {
-                                utf8Ptr.set(argOut0.getByteArray(), 1, argOut0.getLength() - 1);
-                                int stringLength = utf8Ptr.getUTF8Length();
-                                intervalStart = ADateParserFactory.parseDatePart(utf8Ptr.getByteArray(),
-                                        utf8Ptr.getCharStartOffset(), stringLength)
-                                        / GregorianCalendarSystem.CHRONON_OF_DAY;
-                            } else {
-                                throw new AlgebricksException(FID.getName()
-                                        + ": expects NULL/STRING/DATE for the first argument, but got "
-                                        + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argOut0.getByteArray()[0]));
+                            if (argOut0.getByteArray()[0] != argOut1.getByteArray()[0]) {
+                                throw new AlgebricksException(
+                                        FID.getName()
+                                                + ": expects both arguments to be of the same type. Either DATE/TIME/DATETIME, but got "
+                                                + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(
+                                                        argOut0.getByteArray()[0])
+                                                + " and " + EnumDeserializer.ATYPETAGDESERIALIZER
+                                                        .deserialize(argOut0.getByteArray()[1]));
                             }
 
-                            if (argOut1.getByteArray()[0] == ATypeTag.SERIALIZED_DATE_TYPE_TAG) {
-                                intervalEnd = ADateSerializerDeserializer.getChronon(argOut1.getByteArray(), 1);
-                            } else if (argOut1.getByteArray()[0] == ATypeTag.SERIALIZED_STRING_TYPE_TAG) {
-                                utf8Ptr.set(argOut1.getByteArray(), 1, argOut1.getLength() - 1);
-                                int stringLength = utf8Ptr.getUTF8Length();
-                                intervalEnd = ADateParserFactory.parseDatePart(utf8Ptr.getByteArray(),
-                                        utf8Ptr.getCharStartOffset(), stringLength)
-                                        / GregorianCalendarSystem.CHRONON_OF_DAY;
-                            } else {
-                                throw new AlgebricksException(FID.getName()
-                                        + ": expects NULL/STRING/DATE for the second argument, but got "
-                                        + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argOut1.getByteArray()[0]));
+                            long intervalStart = 0, intervalEnd = 0;
+                            ATypeTag intervalType = EnumDeserializer.ATYPETAGDESERIALIZER
+                                    .deserialize(argOut0.getByteArray()[0]);
+
+                            switch (intervalType) {
+                                case DATE:
+                                    intervalStart = ADateSerializerDeserializer.getChronon(argOut0.getByteArray(), 1);
+                                    intervalEnd = ADateSerializerDeserializer.getChronon(argOut1.getByteArray(), 1);
+                                    break;
+                                case TIME:
+                                    intervalStart = ATimeSerializerDeserializer.getChronon(argOut0.getByteArray(), 1);
+                                    intervalEnd = ATimeSerializerDeserializer.getChronon(argOut1.getByteArray(), 1);
+                                    break;
+                                case DATETIME:
+                                    intervalStart = ADateTimeSerializerDeserializer.getChronon(argOut0.getByteArray(),
+                                            1);
+                                    intervalEnd = ADateTimeSerializerDeserializer.getChronon(argOut1.getByteArray(), 1);
+                                    break;
+                                default:
+                                    throw new AlgebricksException(
+                                            FID.getName() + ": expects NULL/DATE/TIME/DATETIME as arguments, but got "
+                                                    + intervalType);
                             }
 
                             if (intervalEnd < intervalStart) {
@@ -132,7 +132,7 @@
                                         FID.getName() + ": interval end must not be less than the interval start.");
                             }
 
-                            aInterval.setValue(intervalStart, intervalEnd, ATypeTag.SERIALIZED_DATE_TYPE_TAG);
+                            aInterval.setValue(intervalStart, intervalEnd, intervalType.serialize());
                             intervalSerde.serialize(aInterval, out);
 
                         } catch (IOException e1) {
diff --git a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AIntervalFromDateTimeConstructorDescriptor.java b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AIntervalFromDateTimeConstructorDescriptor.java
deleted file mode 100644
index 2972912..0000000
--- a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AIntervalFromDateTimeConstructorDescriptor.java
+++ /dev/null
@@ -1,181 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.asterix.runtime.evaluators.constructors;
-
-import java.io.DataOutput;
-import java.io.IOException;
-
-import org.apache.asterix.dataflow.data.nontagged.serde.ADateTimeSerializerDeserializer;
-import org.apache.asterix.formats.nontagged.AqlSerializerDeserializerProvider;
-import org.apache.asterix.om.base.AInterval;
-import org.apache.asterix.om.base.AMutableInterval;
-import org.apache.asterix.om.base.ANull;
-import org.apache.asterix.om.base.temporal.ADateParserFactory;
-import org.apache.asterix.om.base.temporal.ATimeParserFactory;
-import org.apache.asterix.om.functions.AsterixBuiltinFunctions;
-import org.apache.asterix.om.functions.IFunctionDescriptor;
-import org.apache.asterix.om.functions.IFunctionDescriptorFactory;
-import org.apache.asterix.om.types.ATypeTag;
-import org.apache.asterix.om.types.BuiltinType;
-import org.apache.asterix.om.types.EnumDeserializer;
-import org.apache.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicDescriptor;
-import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
-import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
-import org.apache.hyracks.algebricks.runtime.base.ICopyEvaluator;
-import org.apache.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
-import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
-import org.apache.hyracks.data.std.api.IDataOutputProvider;
-import org.apache.hyracks.data.std.primitive.UTF8StringPointable;
-import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
-import org.apache.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
-
-public class AIntervalFromDateTimeConstructorDescriptor extends AbstractScalarFunctionDynamicDescriptor {
-
-    private static final long serialVersionUID = 1L;
-    public final static FunctionIdentifier FID = AsterixBuiltinFunctions.INTERVAL_CONSTRUCTOR_DATETIME;
-
-    public static final IFunctionDescriptorFactory FACTORY = new IFunctionDescriptorFactory() {
-        @Override
-        public IFunctionDescriptor createFunctionDescriptor() {
-            return new AIntervalFromDateTimeConstructorDescriptor();
-        }
-    };
-
-    @Override
-    public ICopyEvaluatorFactory createEvaluatorFactory(final ICopyEvaluatorFactory[] args) {
-        return new ICopyEvaluatorFactory() {
-            private static final long serialVersionUID = 1L;
-
-            @Override
-            public ICopyEvaluator createEvaluator(final IDataOutputProvider output) throws AlgebricksException {
-                return new ICopyEvaluator() {
-
-                    private DataOutput out = output.getDataOutput();
-
-                    private ArrayBackedValueStorage argOut0 = new ArrayBackedValueStorage();
-                    private ArrayBackedValueStorage argOut1 = new ArrayBackedValueStorage();
-                    private ICopyEvaluator eval0 = args[0].createEvaluator(argOut0);
-                    private ICopyEvaluator eval1 = args[1].createEvaluator(argOut1);
-                    private String errorMessage = "This can not be an instance of interval (from DateTime)";
-                    //TODO: Where to move and fix these?
-                    private AMutableInterval aInterval = new AMutableInterval(0L, 0L, (byte) 0);
-                    @SuppressWarnings("unchecked")
-                    private ISerializerDeserializer<AInterval> intervalSerde = AqlSerializerDeserializerProvider.INSTANCE
-                            .getSerializerDeserializer(BuiltinType.AINTERVAL);
-                    @SuppressWarnings("unchecked")
-                    private ISerializerDeserializer<ANull> nullSerde = AqlSerializerDeserializerProvider.INSTANCE
-                            .getSerializerDeserializer(BuiltinType.ANULL);
-                    private final UTF8StringPointable utf8Ptr = new UTF8StringPointable();
-
-                    @Override
-                    public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
-
-                        argOut0.reset();
-                        argOut1.reset();
-                        eval0.evaluate(tuple);
-                        eval1.evaluate(tuple);
-
-                        try {
-
-                            if (argOut0.getByteArray()[0] == ATypeTag.SERIALIZED_NULL_TYPE_TAG
-                                    || argOut1.getByteArray()[0] == ATypeTag.SERIALIZED_NULL_TYPE_TAG) {
-                                nullSerde.serialize(ANull.NULL, out);
-                                return;
-                            }
-
-                            long intervalStart = 0, intervalEnd = 0;
-
-                            if (argOut0.getByteArray()[0] == ATypeTag.SERIALIZED_DATETIME_TYPE_TAG) {
-                                intervalStart = ADateTimeSerializerDeserializer.getChronon(argOut0.getByteArray(), 1);
-                            } else if (argOut0.getByteArray()[0] == ATypeTag.SERIALIZED_STRING_TYPE_TAG) {
-                                // start datetime
-                                utf8Ptr.set(argOut0.getByteArray(), 1, argOut0.getLength() - 1);
-
-                                int stringLength = utf8Ptr.getUTF8Length();
-                                // get offset for time part: +1 if it is negative (-)
-                                int startOffset = utf8Ptr.getCharStartOffset();
-                                short timeOffset = (short) ((argOut0.getByteArray()[startOffset] == '-') ? 1 : 0);
-                                timeOffset += 8;
-                                if (argOut0.getByteArray()[startOffset + timeOffset] != 'T') {
-                                    timeOffset += 2;
-                                    if (argOut0.getByteArray()[startOffset + timeOffset] != 'T') {
-                                        throw new AlgebricksException(errorMessage + ": missing T");
-                                    }
-                                }
-                                intervalStart = ADateParserFactory.parseDatePart(argOut0.getByteArray(), startOffset,
-                                        timeOffset);
-                                intervalStart += ATimeParserFactory.parseTimePart(argOut0.getByteArray(),
-                                        startOffset + timeOffset + 1, stringLength - timeOffset - 1);
-                            } else {
-                                throw new AlgebricksException(FID.getName()
-                                        + ": expects NULL/STRING/DATETIME for the first argument, but got "
-                                        + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argOut0.getByteArray()[0]));
-                            }
-
-                            if (argOut1.getByteArray()[0] == ATypeTag.SERIALIZED_DATETIME_TYPE_TAG) {
-                                intervalEnd = ADateTimeSerializerDeserializer.getChronon(argOut1.getByteArray(), 1);
-                            } else if (argOut1.getByteArray()[0] == ATypeTag.SERIALIZED_STRING_TYPE_TAG) {
-                                // start datetime
-                                utf8Ptr.set(argOut1.getByteArray(), 1, argOut1.getLength() - 1);
-                                int stringLength = utf8Ptr.getUTF8Length();
-                                // get offset for time part: +1 if it is negative (-)
-                                int startOffset = utf8Ptr.getCharStartOffset();
-                                short timeOffset = (short) ((argOut1.getByteArray()[startOffset] == '-') ? 1 : 0);
-                                timeOffset += 8;
-                                if (argOut1.getByteArray()[startOffset + timeOffset] != 'T') {
-                                    timeOffset += 2;
-                                    if (argOut1.getByteArray()[startOffset + timeOffset] != 'T') {
-                                        throw new AlgebricksException(errorMessage + ": missing T");
-                                    }
-                                }
-                                intervalEnd = ADateParserFactory.parseDatePart(argOut1.getByteArray(), startOffset,
-                                        timeOffset);
-                                intervalEnd += ATimeParserFactory.parseTimePart(argOut1.getByteArray(),
-                                        startOffset + timeOffset + 1, stringLength - timeOffset - 1);
-                            } else {
-                                throw new AlgebricksException(FID.getName()
-                                        + ": expects NULL/STRING/DATETIME for the second argument, but got "
-                                        + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argOut1.getByteArray()[0]));
-                            }
-
-                            if (intervalEnd < intervalStart) {
-                                throw new AlgebricksException(
-                                        FID.getName() + ": interval end must not be less than the interval start.");
-                            }
-
-                            aInterval.setValue(intervalStart, intervalEnd, ATypeTag.SERIALIZED_DATETIME_TYPE_TAG);
-                            intervalSerde.serialize(aInterval, out);
-
-                        } catch (IOException e1) {
-                            throw new AlgebricksException(errorMessage);
-                        } catch (Exception e2) {
-                            throw new AlgebricksException(e2);
-                        }
-                    }
-                };
-            }
-        };
-    }
-
-    @Override
-    public FunctionIdentifier getIdentifier() {
-        return FID;
-    }
-
-}
\ No newline at end of file
diff --git a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AIntervalFromTimeConstructorDescriptor.java b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AIntervalFromTimeConstructorDescriptor.java
deleted file mode 100644
index 25bc7df..0000000
--- a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AIntervalFromTimeConstructorDescriptor.java
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.asterix.runtime.evaluators.constructors;
-
-import java.io.DataOutput;
-import java.io.IOException;
-
-import org.apache.asterix.dataflow.data.nontagged.serde.ATimeSerializerDeserializer;
-import org.apache.asterix.formats.nontagged.AqlSerializerDeserializerProvider;
-import org.apache.asterix.om.base.AInterval;
-import org.apache.asterix.om.base.AMutableInterval;
-import org.apache.asterix.om.base.ANull;
-import org.apache.asterix.om.base.temporal.ATimeParserFactory;
-import org.apache.asterix.om.base.temporal.GregorianCalendarSystem;
-import org.apache.asterix.om.functions.AsterixBuiltinFunctions;
-import org.apache.asterix.om.functions.IFunctionDescriptor;
-import org.apache.asterix.om.functions.IFunctionDescriptorFactory;
-import org.apache.asterix.om.types.ATypeTag;
-import org.apache.asterix.om.types.BuiltinType;
-import org.apache.asterix.om.types.EnumDeserializer;
-import org.apache.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicDescriptor;
-import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
-import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
-import org.apache.hyracks.algebricks.runtime.base.ICopyEvaluator;
-import org.apache.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
-import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
-import org.apache.hyracks.data.std.api.IDataOutputProvider;
-import org.apache.hyracks.data.std.primitive.UTF8StringPointable;
-import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
-import org.apache.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
-
-public class AIntervalFromTimeConstructorDescriptor extends AbstractScalarFunctionDynamicDescriptor {
-    private static final long serialVersionUID = 1L;
-    public final static FunctionIdentifier FID = AsterixBuiltinFunctions.INTERVAL_CONSTRUCTOR_TIME;
-    public static final IFunctionDescriptorFactory FACTORY = new IFunctionDescriptorFactory() {
-        @Override
-        public IFunctionDescriptor createFunctionDescriptor() {
-            return new AIntervalFromTimeConstructorDescriptor();
-        }
-    };
-
-    @Override
-    public ICopyEvaluatorFactory createEvaluatorFactory(final ICopyEvaluatorFactory[] args) {
-        return new ICopyEvaluatorFactory() {
-            private static final long serialVersionUID = 1L;
-
-            @Override
-            public ICopyEvaluator createEvaluator(final IDataOutputProvider output) throws AlgebricksException {
-                return new ICopyEvaluator() {
-
-                    private DataOutput out = output.getDataOutput();
-
-                    private ArrayBackedValueStorage argOut0 = new ArrayBackedValueStorage();
-                    private ArrayBackedValueStorage argOut1 = new ArrayBackedValueStorage();
-                    private ICopyEvaluator eval0 = args[0].createEvaluator(argOut0);
-                    private ICopyEvaluator eval1 = args[1].createEvaluator(argOut1);
-                    private String errorMessage = "This can not be an instance of interval (from Date)";
-                    //TODO: Where to move and fix these?
-                    private AMutableInterval aInterval = new AMutableInterval(0L, 0L, (byte) 0);
-                    @SuppressWarnings("unchecked")
-                    private ISerializerDeserializer<AInterval> intervalSerde = AqlSerializerDeserializerProvider.INSTANCE
-                            .getSerializerDeserializer(BuiltinType.AINTERVAL);
-                    @SuppressWarnings("unchecked")
-                    private ISerializerDeserializer<ANull> nullSerde = AqlSerializerDeserializerProvider.INSTANCE
-                            .getSerializerDeserializer(BuiltinType.ANULL);
-                    private final UTF8StringPointable utf8Ptr = new UTF8StringPointable();
-
-                    @Override
-                    public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
-
-                        argOut0.reset();
-                        argOut1.reset();
-                        eval0.evaluate(tuple);
-                        eval1.evaluate(tuple);
-
-                        try {
-
-                            if (argOut0.getByteArray()[0] == ATypeTag.SERIALIZED_NULL_TYPE_TAG
-                                    || argOut1.getByteArray()[0] == ATypeTag.SERIALIZED_NULL_TYPE_TAG) {
-                                nullSerde.serialize(ANull.NULL, out);
-                                return;
-                            }
-
-                            long intervalStart = 0, intervalEnd = 0;
-
-                            if (argOut0.getByteArray()[0] == ATypeTag.SERIALIZED_TIME_TYPE_TAG) {
-                                intervalStart = ATimeSerializerDeserializer.getChronon(argOut0.getByteArray(), 1);
-                            } else if (argOut0.getByteArray()[0] == ATypeTag.SERIALIZED_STRING_TYPE_TAG) {
-                                utf8Ptr.set(argOut0.getByteArray(), 1, argOut0.getLength() - 1);
-                                // start date
-                                int stringLength = utf8Ptr.getUTF8Length();
-
-                                intervalStart = ATimeParserFactory.parseTimePart(utf8Ptr.getByteArray(),
-                                        utf8Ptr.getCharStartOffset(), stringLength);
-                            } else {
-                                throw new AlgebricksException(FID.getName()
-                                        + ": expects NULL/STRING/TIME for the first argument, but got "
-                                        + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argOut0.getByteArray()[0]));
-                            }
-
-                            if (intervalStart < 0) {
-                                intervalStart += GregorianCalendarSystem.CHRONON_OF_DAY;
-                            }
-
-                            if (argOut1.getByteArray()[0] == ATypeTag.SERIALIZED_TIME_TYPE_TAG) {
-                                intervalEnd = ATimeSerializerDeserializer.getChronon(argOut1.getByteArray(), 1);
-                            } else if (argOut1.getByteArray()[0] == ATypeTag.SERIALIZED_STRING_TYPE_TAG) {
-                                utf8Ptr.set(argOut1.getByteArray(), 1, argOut1.getLength() - 1);
-                                // start date
-                                int stringLength = utf8Ptr.getUTF8Length();
-
-                                intervalEnd = ATimeParserFactory.parseTimePart(argOut1.getByteArray(),
-                                        utf8Ptr.getCharStartOffset(), stringLength);
-
-                            } else {
-                                throw new AlgebricksException(FID.getName()
-                                        + ": expects NULL/STRING/TIME for the second argument, but got "
-                                        + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argOut1.getByteArray()[0]));
-                            }
-
-                            if (intervalEnd < 0) {
-                                intervalEnd += GregorianCalendarSystem.CHRONON_OF_DAY;
-                            }
-
-                            if (intervalEnd < intervalStart) {
-                                throw new AlgebricksException(
-                                        FID.getName() + ": interval end must not be less than the interval start.");
-                            }
-
-                            aInterval.setValue(intervalStart, intervalEnd, ATypeTag.SERIALIZED_TIME_TYPE_TAG);
-                            intervalSerde.serialize(aInterval, out);
-
-                        } catch (IOException e1) {
-                            throw new AlgebricksException(errorMessage);
-                        } catch (Exception e2) {
-                            throw new AlgebricksException(e2);
-                        }
-                    }
-                };
-            }
-        };
-    }
-
-    @Override
-    public FunctionIdentifier getIdentifier() {
-        return FID;
-    }
-
-}
\ No newline at end of file
diff --git a/asterix-runtime/src/main/java/org/apache/asterix/runtime/formats/NonTaggedDataFormat.java b/asterix-runtime/src/main/java/org/apache/asterix/runtime/formats/NonTaggedDataFormat.java
index 715bba7..27dadfc 100644
--- a/asterix-runtime/src/main/java/org/apache/asterix/runtime/formats/NonTaggedDataFormat.java
+++ b/asterix-runtime/src/main/java/org/apache/asterix/runtime/formats/NonTaggedDataFormat.java
@@ -150,9 +150,7 @@
 import org.apache.asterix.runtime.evaluators.constructors.AInt32ConstructorDescriptor;
 import org.apache.asterix.runtime.evaluators.constructors.AInt64ConstructorDescriptor;
 import org.apache.asterix.runtime.evaluators.constructors.AInt8ConstructorDescriptor;
-import org.apache.asterix.runtime.evaluators.constructors.AIntervalFromDateConstructorDescriptor;
-import org.apache.asterix.runtime.evaluators.constructors.AIntervalFromDateTimeConstructorDescriptor;
-import org.apache.asterix.runtime.evaluators.constructors.AIntervalFromTimeConstructorDescriptor;
+import org.apache.asterix.runtime.evaluators.constructors.AIntervalConstructorDescriptor;
 import org.apache.asterix.runtime.evaluators.constructors.AIntervalStartFromDateConstructorDescriptor;
 import org.apache.asterix.runtime.evaluators.constructors.AIntervalStartFromDateTimeConstructorDescriptor;
 import org.apache.asterix.runtime.evaluators.constructors.AIntervalStartFromTimeConstructorDescriptor;
@@ -605,9 +603,7 @@
         temp.add(DurationFromIntervalDescriptor.FACTORY);
 
         // Interval constructor
-        temp.add(AIntervalFromDateConstructorDescriptor.FACTORY);
-        temp.add(AIntervalFromTimeConstructorDescriptor.FACTORY);
-        temp.add(AIntervalFromDateTimeConstructorDescriptor.FACTORY);
+        temp.add(AIntervalConstructorDescriptor.FACTORY);
         temp.add(AIntervalStartFromDateConstructorDescriptor.FACTORY);
         temp.add(AIntervalStartFromDateTimeConstructorDescriptor.FACTORY);
         temp.add(AIntervalStartFromTimeConstructorDescriptor.FACTORY);
@@ -866,8 +862,9 @@
 
         functionTypeInferers.put(AsterixBuiltinFunctions.DEEP_EQUAL, new FunctionTypeInferer() {
 
-            @Override public void infer(ILogicalExpression expr, IFunctionDescriptor fd,
-                    IVariableTypeEnvironment context) throws AlgebricksException {
+            @Override
+            public void infer(ILogicalExpression expr, IFunctionDescriptor fd, IVariableTypeEnvironment context)
+                    throws AlgebricksException {
                 AbstractFunctionCallExpression f = (AbstractFunctionCallExpression) expr;
                 IAType type0 = (IAType) context.getType(f.getArguments().get(0).getValue());
                 IAType type1 = (IAType) context.getType(f.getArguments().get(1).getValue());
@@ -877,8 +874,9 @@
 
         functionTypeInferers.put(AsterixBuiltinFunctions.ADD_FIELDS, new FunctionTypeInferer() {
 
-            @Override public void infer(ILogicalExpression expr, IFunctionDescriptor fd,
-                    IVariableTypeEnvironment context) throws AlgebricksException {
+            @Override
+            public void infer(ILogicalExpression expr, IFunctionDescriptor fd, IVariableTypeEnvironment context)
+                    throws AlgebricksException {
                 AbstractFunctionCallExpression f = (AbstractFunctionCallExpression) expr;
                 IAType outType = (IAType) context.getType(expr);
                 IAType type0 = (IAType) context.getType(f.getArguments().get(0).getValue());
@@ -896,8 +894,9 @@
 
         functionTypeInferers.put(AsterixBuiltinFunctions.REMOVE_FIELDS, new FunctionTypeInferer() {
 
-            @Override public void infer(ILogicalExpression expr, IFunctionDescriptor fd,
-                    IVariableTypeEnvironment context) throws AlgebricksException {
+            @Override
+            public void infer(ILogicalExpression expr, IFunctionDescriptor fd, IVariableTypeEnvironment context)
+                    throws AlgebricksException {
                 AbstractFunctionCallExpression f = (AbstractFunctionCallExpression) expr;
                 IAType outType = (IAType) context.getType(expr);
                 IAType type0 = (IAType) context.getType(f.getArguments().get(0).getValue());

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/602
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I009c71b7a445d141e228ba15d56d0b6cf3c8a3f5
Gerrit-PatchSet: 8
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Preston Carman <pr...@apache.org>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-Reviewer: Preston Carman <pr...@apache.org>
Gerrit-Reviewer: Till Westmann <ti...@apache.org>

Change in asterixdb[master]: ASTERIXDB-1281 - Interval format update to AQL and ADM

Posted by "Till Westmann (Code Review)" <do...@asterixdb.incubator.apache.org>.
Till Westmann has posted comments on this change.

Change subject: ASTERIXDB-1281 - Interval format update to AQL and ADM
......................................................................


Patch Set 2:

(12 comments)

Some more comments/questions

https://asterix-gerrit.ics.uci.edu/#/c/602/2/asterix-external-data/src/main/java/org/apache/asterix/external/parser/ADMDataParser.java
File asterix-external-data/src/main/java/org/apache/asterix/external/parser/ADMDataParser.java:

Line 705:         if (token == AdmLexer.TOKEN_CONSTRUCTOR_OPEN) {
Could we replace these ifs with a switch?


Line 711:                 if (token == AdmLexer.TOKEN_COMMA) {
I think that this if-statement should be replaceable with a small method that returns end and can be reused in all cases. It that right?


Line 717:                                 + AdmLexer.tokenKindToString(startToken) + " != " + AdmLexer.tokenKindToString(token));
It seems that startToken is an "(", if we are here. That's probably not intended, right? Can we add a test for this case (for all types)?


Line 780:                 if (tag == ATypeTag.DATE) {
Can we replace this with a switch?


Line 782:                         chrononTimeInMs += (parseDatePart(arg, 0, arg.length() - 1)
This code exists somewhere else as well, right? Can we reuse that?


Line 784:                     } catch (Exception e) {
Can we move the exception handling code outside the switch (if we need it)?


Line 785:                         throw new HyracksDataException(e);
Why would we throw a HyracksDataException here? Shouldn't this be a ParseException?


Line 797:                             throw new AlgebricksException(
Why is this an AlgebricksException? This is happening at runtime, right?


https://asterix-gerrit.ics.uci.edu/#/c/602/2/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AOrderedListSerializerDeserializer.java
File asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AOrderedListSerializerDeserializer.java:

Line 81:             fixedSize = NonTaggedFormatUtil.isFixedSizedCollection(typeTag);
Yes!


https://asterix-gerrit.ics.uci.edu/#/c/602/2/asterix-om/src/main/java/org/apache/asterix/om/util/NonTaggedFormatUtil.java
File asterix-om/src/main/java/org/apache/asterix/om/util/NonTaggedFormatUtil.java:

Line 71:     public static final boolean isFixedSizedCollection(ATypeTag type) {
Why do we have a different result here than for the other method of the same name?


https://asterix-gerrit.ics.uci.edu/#/c/602/2/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AIntervalConstructorDescriptor.java
File asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AIntervalConstructorDescriptor.java:

Line 116:                             if (argOut0.getByteArray()[0] == SER_DATE_TYPE_TAG) {
Could this be a switch?


Line 131:                             if (argOut1.getByteArray()[0] == SER_DATE_TYPE_TAG) {
Could this be a switch?


-- 
To view, visit https://asterix-gerrit.ics.uci.edu/602
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: I009c71b7a445d141e228ba15d56d0b6cf3c8a3f5
Gerrit-PatchSet: 2
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Preston Carman <pr...@apache.org>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-Reviewer: Preston Carman <pr...@apache.org>
Gerrit-Reviewer: Till Westmann <ti...@apache.org>
Gerrit-HasComments: Yes

Change in asterixdb[master]: ASTERIXDB-1281 - Interval format update to AQL and ADM

Posted by "Till Westmann (Code Review)" <do...@asterixdb.incubator.apache.org>.
Till Westmann has posted comments on this change.

Change subject: ASTERIXDB-1281 - Interval format update to AQL and ADM
......................................................................


Patch Set 6:

(13 comments)

Looks good. There are a few small points, but there's one big question about creating intervals from a start point and a duration.
It seems that this change removes some test coverage in that area and I'm wondering if 
a) we're also losing the functionality and
b) if that's intended.

https://asterix-gerrit.ics.uci.edu/#/c/602/6/asterix-app/src/test/resources/runtimets/queries/constructor/interval/interval.3.query.aql
File asterix-app/src/test/resources/runtimets/queries/constructor/interval/interval.3.query.aql:

Line 32: return {"interval71": $itv71, "interval72": $itv72, "interval73": $itv73, "interval74": $itv74, "interval75": $itv75, "interval76": $itv76, "interval77": $itv77, "interval78": $itv78, "interval79": $itv79}
Did we lose the ability to create an interval from a start point and a duration?


https://asterix-gerrit.ics.uci.edu/#/c/602/6/asterix-app/src/test/resources/runtimets/testsuite.xml
File asterix-app/src/test/resources/runtimets/testsuite.xml:

Line 6300:         <test-case FilePath="temporal">
Which tests did we remove here?


https://asterix-gerrit.ics.uci.edu/#/c/602/6/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
File asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml:

Line 6126:             </compilation-unit>
Which tests did we remove here?


https://asterix-gerrit.ics.uci.edu/#/c/602/6/asterix-app/src/test/resources/runtimets/testsuite_sqlpp_parser.xml
File asterix-app/src/test/resources/runtimets/testsuite_sqlpp_parser.xml:

Line 6350:             </compilation-unit>
Which tests did we remove here?


https://asterix-gerrit.ics.uci.edu/#/c/602/6/asterix-external-data/src/main/java/org/apache/asterix/external/parser/ADMDataParser.java
File asterix-external-data/src/main/java/org/apache/asterix/external/parser/ADMDataParser.java:

Line 341:                     throw new ParseException(mismatchErrorMessage + objectType.getTypeTag());
For the other types we use the type name, not the type tag. Should we do the same here?


Line 671:             throws IOException {
It seems that the line break is a little early.


Line 715:             throws IOException {
It seems that the line break is a little early.


Line 718:         token = admLexer.next();
Single line would be enough :)


Line 730:         return end;
Challenge: I can write this method in 9 lines without changing semantics or violating the code style.
(Ok, this is not an issue that needs addressing :) .)


Line 768:         throw new ParseException("Interval argument properly constructed.");
"not"?


https://asterix-gerrit.ics.uci.edu/#/c/602/6/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/adm/AIntervalPrinter.java
File asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/adm/AIntervalPrinter.java:

Line 71:         }
Couldn't we just do this?

        if (typetag == ATypeTag.SERIALIZED_DATE_TYPE_TAG) {
            timeInstancePrinter = ADatePrinter.INSTANCE;
        } else if (typetag == ATypeTag.SERIALIZED_TIME_TYPE_TAG) {
            timeInstancePrinter = ATimePrinter.INSTANCE;
        } else if (typetag == ATypeTag.SERIALIZED_DATETIME_TYPE_TAG) {
            timeInstancePrinter = ADateTimePrinter.INSTANCE;
        } else {
            throw new AlgebricksException("Unsupport internal time types in interval: " + typetag);
        }
        timeInstancePrinter.print(b, startOffset, startSize, ps);
        ps.print(", ");
        timeInstancePrinter.print(b, endOffset, endSize, ps);


https://asterix-gerrit.ics.uci.edu/#/c/602/6/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/clean/AIntervalPrinter.java
File asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/clean/AIntervalPrinter.java:

Line 74:         }
Same as adm/AIntervalPrinter.java?


https://asterix-gerrit.ics.uci.edu/#/c/602/6/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/lossless/AIntervalPrinter.java
File asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/lossless/AIntervalPrinter.java:

Line 74:         }
Same as adm/AIntervalPrinter.java?


-- 
To view, visit https://asterix-gerrit.ics.uci.edu/602
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: I009c71b7a445d141e228ba15d56d0b6cf3c8a3f5
Gerrit-PatchSet: 6
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Preston Carman <pr...@apache.org>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-Reviewer: Preston Carman <pr...@apache.org>
Gerrit-Reviewer: Till Westmann <ti...@apache.org>
Gerrit-HasComments: Yes

Change in asterixdb[master]: ASTERIXDB-1281 - Interval format update to AQL and ADM

Posted by "Jenkins (Code Review)" <do...@asterixdb.incubator.apache.org>.
Jenkins has posted comments on this change.

Change subject: ASTERIXDB-1281 - Interval format update to AQL and ADM
......................................................................


Patch Set 2:

Build Started https://asterix-jenkins.ics.uci.edu/job/asterix-gerrit-notopic/761/

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/602
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: I009c71b7a445d141e228ba15d56d0b6cf3c8a3f5
Gerrit-PatchSet: 2
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Preston Carman <pr...@apache.org>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-Reviewer: Preston Carman <pr...@apache.org>
Gerrit-Reviewer: Till Westmann <ti...@apache.org>
Gerrit-HasComments: No

Change in asterixdb[master]: ASTERIXDB-1281 - Interval format update to AQL and ADM

Posted by "Jenkins (Code Review)" <do...@asterixdb.incubator.apache.org>.
Jenkins has posted comments on this change.

Change subject: ASTERIXDB-1281 - Interval format update to AQL and ADM
......................................................................


Patch Set 5: Verified+1

Build Successful 

https://asterix-jenkins.ics.uci.edu/job/asterix-gerrit-notopic/771/ : SUCCESS

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/602
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: I009c71b7a445d141e228ba15d56d0b6cf3c8a3f5
Gerrit-PatchSet: 5
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Preston Carman <pr...@apache.org>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-Reviewer: Preston Carman <pr...@apache.org>
Gerrit-Reviewer: Till Westmann <ti...@apache.org>
Gerrit-HasComments: No

Change in asterixdb[master]: ASTERIXDB-1281 - Interval format update to AQL and ADM

Posted by "Jenkins (Code Review)" <do...@asterixdb.incubator.apache.org>.
Jenkins has posted comments on this change.

Change subject: ASTERIXDB-1281 - Interval format update to AQL and ADM
......................................................................


Patch Set 2: Verified-1

Build Unstable 

https://asterix-jenkins.ics.uci.edu/job/asterix-gerrit-notopic/761/ : UNSTABLE

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/602
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: I009c71b7a445d141e228ba15d56d0b6cf3c8a3f5
Gerrit-PatchSet: 2
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Preston Carman <pr...@apache.org>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-Reviewer: Preston Carman <pr...@apache.org>
Gerrit-Reviewer: Till Westmann <ti...@apache.org>
Gerrit-HasComments: No

Change in asterixdb[master]: ASTERIXDB-1281 - Interval format update to AQL and ADM

Posted by "Jenkins (Code Review)" <do...@asterixdb.incubator.apache.org>.
Jenkins has posted comments on this change.

Change subject: ASTERIXDB-1281 - Interval format update to AQL and ADM
......................................................................


Patch Set 4:

Build Started https://asterix-jenkins.ics.uci.edu/job/asterix-gerrit-notopic/768/

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/602
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: I009c71b7a445d141e228ba15d56d0b6cf3c8a3f5
Gerrit-PatchSet: 4
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Preston Carman <pr...@apache.org>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-Reviewer: Preston Carman <pr...@apache.org>
Gerrit-Reviewer: Till Westmann <ti...@apache.org>
Gerrit-HasComments: No

Change in asterixdb[master]: ASTERIXDB-1281 - Interval format update to AQL and ADM

Posted by "Jenkins (Code Review)" <do...@asterixdb.incubator.apache.org>.
Jenkins has posted comments on this change.

Change subject: ASTERIXDB-1281 - Interval format update to AQL and ADM
......................................................................


Patch Set 6:

Build Started https://asterix-jenkins.ics.uci.edu/job/asterix-gerrit-notopic/777/

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/602
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: I009c71b7a445d141e228ba15d56d0b6cf3c8a3f5
Gerrit-PatchSet: 6
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Preston Carman <pr...@apache.org>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-Reviewer: Preston Carman <pr...@apache.org>
Gerrit-Reviewer: Till Westmann <ti...@apache.org>
Gerrit-HasComments: No

Change in asterixdb[master]: ASTERIXDB-1281 - Interval format update to AQL and ADM

Posted by "Till Westmann (Code Review)" <do...@asterixdb.incubator.apache.org>.
Till Westmann has posted comments on this change.

Change subject: ASTERIXDB-1281 - Interval format update to AQL and ADM
......................................................................


Patch Set 4:

(1 comment)

https://asterix-gerrit.ics.uci.edu/#/c/602/4/asterix-external-data/src/main/java/org/apache/asterix/external/parser/ADMDataParser.java
File asterix-external-data/src/main/java/org/apache/asterix/external/parser/ADMDataParser.java:

Line 723:     public long parseIntervalSecondArguement(int startToken, ATypeTag parseType)
s/Arguement/Argument/


-- 
To view, visit https://asterix-gerrit.ics.uci.edu/602
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: I009c71b7a445d141e228ba15d56d0b6cf3c8a3f5
Gerrit-PatchSet: 4
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Preston Carman <pr...@apache.org>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-Reviewer: Preston Carman <pr...@apache.org>
Gerrit-Reviewer: Till Westmann <ti...@apache.org>
Gerrit-HasComments: Yes

Change in asterixdb[master]: ASTERIXDB-1281 - Interval format update to AQL and ADM

Posted by "Till Westmann (Code Review)" <do...@asterixdb.incubator.apache.org>.
Till Westmann has posted comments on this change.

Change subject: ASTERIXDB-1281 - Interval format update to AQL and ADM
......................................................................


Patch Set 1:

(4 comments)

Haven't looked at all the details, but I have a few questions already :)

https://asterix-gerrit.ics.uci.edu/#/c/602/1/asterix-external-data/src/main/resources/adm.grammar
File asterix-external-data/src/main/resources/adm.grammar:

Line 52: INTERVAL_DATETIME_CONS  = string(interval-datetime)
Can't we remove the last 3 ones now?


https://asterix-gerrit.ics.uci.edu/#/c/602/1/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/adm/AIntervalPrinter.java
File asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/adm/AIntervalPrinter.java:

Line 54:                     AIntervalSerializerDeserializer.getStartSize(b, s + 1), ps);
It is feasible to pull these out into constants?


https://asterix-gerrit.ics.uci.edu/#/c/602/1/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/clean/AIntervalPrinter.java
File asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/clean/AIntervalPrinter.java:

Line 54:                     AIntervalSerializerDeserializer.getStartSize(b, s + 1), ps);
It is feasible to pull these out into constants?


https://asterix-gerrit.ics.uci.edu/#/c/602/1/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/lossless/AIntervalPrinter.java
File asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/lossless/AIntervalPrinter.java:

Line 54:                     AIntervalSerializerDeserializer.getStartSize(b, s + 1), ps);
It is feasible to pull these out into constants?


-- 
To view, visit https://asterix-gerrit.ics.uci.edu/602
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: I009c71b7a445d141e228ba15d56d0b6cf3c8a3f5
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Preston Carman <pr...@apache.org>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-Reviewer: Till Westmann <ti...@apache.org>
Gerrit-HasComments: Yes

Change in asterixdb[master]: ASTERIXDB-1281 - Interval format update to AQL and ADM

Posted by "Preston Carman (Code Review)" <do...@asterixdb.incubator.apache.org>.
Hello Jenkins,

I'd like you to reexamine a change.  Please visit

    https://asterix-gerrit.ics.uci.edu/602

to look at the new patch set (#4).

Change subject: ASTERIXDB-1281 - Interval format update to AQL and ADM
......................................................................

ASTERIXDB-1281 - Interval format update to AQL and ADM

The new interval format takes a more generic approach to representing intervals.
Here is an example for a date interval:

interval(date("2012-01-01”), date(”2013-04-01”))

Note that the interval type is defined by the arguments to the interval expression.
Currently only date, time, and datetime types are supported for intervals. The new
format is used for ADM and AQL.

In addition to the format change, the internal byte structure of an interval has been
updated. The format looks like the following:

byte tag, T start, T end (where T is a date, time or datetime type)

Note how the tag has been moved to the front. Also with the new sturcture, an
interval is variable length, not fixed length as before.

Change-Id: I009c71b7a445d141e228ba15d56d0b6cf3c8a3f5
---
M asterix-app/data/temporal/simpletemp_30.json
M asterix-app/data/temporal/temporalData.json
M asterix-app/src/test/resources/runtimets/queries/constructor/interval/interval.3.query.aql
M asterix-app/src/test/resources/runtimets/queries_sqlpp/constructor/interval/interval.3.query.sqlpp
M asterix-app/src/test/resources/runtimets/results/comparison/interval_order/interval_order.3.adm
M asterix-app/src/test/resources/runtimets/results/comparison/interval_order/interval_order.4.adm
M asterix-app/src/test/resources/runtimets/results/constructor/interval/interval.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/get_overlapping_interval/get_overlapping_interval.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/insert_from_ext_ds/insert_from_ext_ds.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/insert_from_ext_ds_2/insert_from_ext_ds_2.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/interval_bin/interval_bin.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/interval_bin_gby_0/interval_bin_gby_0.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/interval_bin_gby_1/interval_bin_gby_1.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/overlap_bins/overlap_bins.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/overlap_bins_gby_0/overlap_bins_gby_0.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/overlap_bins_gby_1/overlap_bins_gby_1.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/overlap_bins_gby_3/overlap_bins_gby_3.1.adm
M asterix-app/src/test/resources/runtimets/results_parser_sqlpp/constructor/interval/interval.3.ast
M asterix-doc/src/site/markdown/aql/allens.md
M asterix-doc/src/site/markdown/aql/datamodel.md
M asterix-doc/src/site/markdown/aql/functions.md
M asterix-external-data/src/main/java/org/apache/asterix/external/library/java/JObjectAccessors.java
M asterix-external-data/src/main/java/org/apache/asterix/external/parser/ADMDataParser.java
M asterix-external-data/src/main/java/org/apache/asterix/external/parser/AbstractDataParser.java
M asterix-external-data/src/main/resources/adm.grammar
M asterix-external-data/src/test/java/org/apache/asterix/runtime/operator/file/ADMDataParserTest.java
M asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AIntervalAscPartialBinaryComparatorFactory.java
M asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AIntervalDescPartialBinaryComparatorFactory.java
M asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/adm/AIntervalPrinter.java
M asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/clean/AIntervalPrinter.java
M asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/lossless/AIntervalPrinter.java
M asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AIntervalSerializerDeserializer.java
M asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AOrderedListSerializerDeserializer.java
M asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AUnorderedListSerializerDeserializer.java
M asterix-om/src/main/java/org/apache/asterix/om/functions/AsterixBuiltinFunctions.java
M asterix-om/src/main/java/org/apache/asterix/om/pointables/AListVisitablePointable.java
M asterix-om/src/main/java/org/apache/asterix/om/pointables/printer/json/clean/APrintVisitor.java
M asterix-om/src/main/java/org/apache/asterix/om/pointables/printer/json/lossless/APrintVisitor.java
M asterix-om/src/main/java/org/apache/asterix/om/util/NonTaggedFormatUtil.java
M asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalEndAccessor.java
M asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalEndDateAccessor.java
M asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalEndDatetimeAccessor.java
M asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalEndTimeAccessor.java
M asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalStartAccessor.java
M asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalStartDateAccessor.java
M asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalStartDatetimeAccessor.java
M asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalStartTimeAccessor.java
A asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AIntervalConstructorDescriptor.java
M asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/AbstractIntervalLogicFuncDescriptor.java
M asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DurationFromIntervalDescriptor.java
M asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/GetOverlappingIntervalDescriptor.java
M asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/OverlapBinsDescriptor.java
M asterix-runtime/src/main/java/org/apache/asterix/runtime/formats/NonTaggedDataFormat.java
53 files changed, 828 insertions(+), 576 deletions(-)


  git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb refs/changes/02/602/4
-- 
To view, visit https://asterix-gerrit.ics.uci.edu/602
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: newpatchset
Gerrit-Change-Id: I009c71b7a445d141e228ba15d56d0b6cf3c8a3f5
Gerrit-PatchSet: 4
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Preston Carman <pr...@apache.org>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-Reviewer: Preston Carman <pr...@apache.org>
Gerrit-Reviewer: Till Westmann <ti...@apache.org>

Change in asterixdb[master]: ASTERIXDB-1281 - Interval format update to AQL and ADM

Posted by "Preston Carman (Code Review)" <do...@asterixdb.incubator.apache.org>.
Hello Jenkins,

I'd like you to reexamine a change.  Please visit

    https://asterix-gerrit.ics.uci.edu/602

to look at the new patch set (#2).

Change subject: ASTERIXDB-1281 - Interval format update to AQL and ADM
......................................................................

ASTERIXDB-1281 - Interval format update to AQL and ADM

The new interval format takes a more generic approach to representing intervals.
Here is an example for a date interval:

interval(date("2012-01-01”), date(”2013-04-01”))

Note that the interval type is defined by the arguments to the interval expression.
Currently only date, time, and datetime types are supported for intervals. The new
format is used for ADM and AQL.

In addition to the format change, the internal byte structure of an interval has been
updated. The format looks like the following:

byte tag, T start, T end (where T is a date, time or datetime type)

Note how the tag has been moved to the front. Also with the new sturcture, an
interval is variable length, not fixed length as before.

Change-Id: I009c71b7a445d141e228ba15d56d0b6cf3c8a3f5
---
M asterix-app/data/temporal/simpletemp_30.json
M asterix-app/data/temporal/temporalData.json
M asterix-app/src/test/resources/runtimets/queries/constructor/interval/interval.3.query.aql
M asterix-app/src/test/resources/runtimets/queries_sqlpp/constructor/interval/interval.3.query.sqlpp
M asterix-app/src/test/resources/runtimets/results/comparison/interval_order/interval_order.3.adm
M asterix-app/src/test/resources/runtimets/results/comparison/interval_order/interval_order.4.adm
M asterix-app/src/test/resources/runtimets/results/constructor/interval/interval.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/get_overlapping_interval/get_overlapping_interval.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/insert_from_ext_ds/insert_from_ext_ds.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/insert_from_ext_ds_2/insert_from_ext_ds_2.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/interval_bin/interval_bin.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/interval_bin_gby_0/interval_bin_gby_0.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/interval_bin_gby_1/interval_bin_gby_1.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/overlap_bins/overlap_bins.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/overlap_bins_gby_0/overlap_bins_gby_0.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/overlap_bins_gby_1/overlap_bins_gby_1.1.adm
M asterix-app/src/test/resources/runtimets/results/temporal/overlap_bins_gby_3/overlap_bins_gby_3.1.adm
M asterix-app/src/test/resources/runtimets/results_parser_sqlpp/constructor/interval/interval.3.ast
M asterix-doc/src/site/markdown/aql/allens.md
M asterix-doc/src/site/markdown/aql/datamodel.md
M asterix-doc/src/site/markdown/aql/functions.md
M asterix-external-data/src/main/java/org/apache/asterix/external/library/java/JObjectAccessors.java
M asterix-external-data/src/main/java/org/apache/asterix/external/parser/ADMDataParser.java
M asterix-external-data/src/main/java/org/apache/asterix/external/parser/AbstractDataParser.java
M asterix-external-data/src/main/resources/adm.grammar
M asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AIntervalAscPartialBinaryComparatorFactory.java
M asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AIntervalDescPartialBinaryComparatorFactory.java
M asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/adm/AIntervalPrinter.java
M asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/clean/AIntervalPrinter.java
M asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/lossless/AIntervalPrinter.java
M asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AIntervalSerializerDeserializer.java
M asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AOrderedListSerializerDeserializer.java
M asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AUnorderedListSerializerDeserializer.java
M asterix-om/src/main/java/org/apache/asterix/om/functions/AsterixBuiltinFunctions.java
M asterix-om/src/main/java/org/apache/asterix/om/pointables/AListVisitablePointable.java
M asterix-om/src/main/java/org/apache/asterix/om/pointables/printer/json/clean/APrintVisitor.java
M asterix-om/src/main/java/org/apache/asterix/om/pointables/printer/json/lossless/APrintVisitor.java
M asterix-om/src/main/java/org/apache/asterix/om/util/NonTaggedFormatUtil.java
M asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalEndAccessor.java
M asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalEndDateAccessor.java
M asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalEndDatetimeAccessor.java
M asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalEndTimeAccessor.java
M asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalStartAccessor.java
M asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalStartDateAccessor.java
M asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalStartDatetimeAccessor.java
M asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalStartTimeAccessor.java
A asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AIntervalConstructorDescriptor.java
M asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/AbstractIntervalLogicFuncDescriptor.java
M asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DurationFromIntervalDescriptor.java
M asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/GetOverlappingIntervalDescriptor.java
M asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/OverlapBinsDescriptor.java
M asterix-runtime/src/main/java/org/apache/asterix/runtime/formats/NonTaggedDataFormat.java
52 files changed, 836 insertions(+), 521 deletions(-)


  git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb refs/changes/02/602/2
-- 
To view, visit https://asterix-gerrit.ics.uci.edu/602
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: newpatchset
Gerrit-Change-Id: I009c71b7a445d141e228ba15d56d0b6cf3c8a3f5
Gerrit-PatchSet: 2
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Preston Carman <pr...@apache.org>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-Reviewer: Preston Carman <pr...@apache.org>
Gerrit-Reviewer: Till Westmann <ti...@apache.org>

Change in asterixdb[master]: ASTERIXDB-1281 - Interval format update to AQL and ADM

Posted by "Jenkins (Code Review)" <do...@asterixdb.incubator.apache.org>.
Jenkins has posted comments on this change.

Change subject: ASTERIXDB-1281 - Interval format update to AQL and ADM
......................................................................


Patch Set 7:

Build Started https://asterix-jenkins.ics.uci.edu/job/asterix-gerrit-notopic/780/

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/602
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: I009c71b7a445d141e228ba15d56d0b6cf3c8a3f5
Gerrit-PatchSet: 7
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Preston Carman <pr...@apache.org>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-Reviewer: Preston Carman <pr...@apache.org>
Gerrit-Reviewer: Till Westmann <ti...@apache.org>
Gerrit-HasComments: No

Change in asterixdb[master]: ASTERIXDB-1281 - Interval format update to AQL and ADM

Posted by "Jenkins (Code Review)" <do...@asterixdb.incubator.apache.org>.
Jenkins has posted comments on this change.

Change subject: ASTERIXDB-1281 - Interval format update to AQL and ADM
......................................................................


Patch Set 1: Verified-1

Build Unstable 

https://asterix-jenkins.ics.uci.edu/job/asterix-gerrit-notopic/760/ : UNSTABLE

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/602
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: I009c71b7a445d141e228ba15d56d0b6cf3c8a3f5
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Preston Carman <pr...@apache.org>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-HasComments: No

Change in asterixdb[master]: ASTERIXDB-1281 - Interval format update to AQL and ADM

Posted by "Till Westmann (Code Review)" <do...@asterixdb.incubator.apache.org>.
Till Westmann has posted comments on this change.

Change subject: ASTERIXDB-1281 - Interval format update to AQL and ADM
......................................................................


Patch Set 1:

(1 comment)

https://asterix-gerrit.ics.uci.edu/#/c/602/1/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/adm/AIntervalPrinter.java
File asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/adm/AIntervalPrinter.java:

Line 54:                     AIntervalSerializerDeserializer.getStartSize(b, s + 1), ps);
> These should definitely come from the AIntervalSerializerDeserializer (or o
Sorry, I chose the wrong words. I didn't mean constants. I meant variables for the expressions that depend on "b" and "s". As "b" and "s" don't change I think that we could put the interval start and end offsets and sizes into named variables before the if statement. Then the code would be a little less busy.


-- 
To view, visit https://asterix-gerrit.ics.uci.edu/602
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: I009c71b7a445d141e228ba15d56d0b6cf3c8a3f5
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Preston Carman <pr...@apache.org>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-Reviewer: Preston Carman <pr...@apache.org>
Gerrit-Reviewer: Till Westmann <ti...@apache.org>
Gerrit-HasComments: Yes