Merge asterix_stabilization into asterix_stabilization_result_distribution.

git-svn-id: https://asterixdb.googlecode.com/svn/branches/asterix_stabilization_result_distribution@1358 eaa15691-b419-025a-1212-ee371bd00084
diff --git a/asterix-app/data/temporal/temporalData.json b/asterix-app/data/temporal/temporalData.json
index 520fd4b..5b3a0f5 100644
--- a/asterix-app/data/temporal/temporalData.json
+++ b/asterix-app/data/temporal/temporalData.json
@@ -1,3 +1,3 @@
-{"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": dtinterval("2012-12-12T00:00:00.001,20130810T221015398") }
-{"id": "002", "datetimeField": datetime("19201220T232918478") }
-{"id": "003", "intervalPlus": tinterval("19:23:32.328Z,23:20:20") }
\ No newline at end of file
+{"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") }
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv20.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv20.aql
new file mode 100644
index 0000000..beebca4
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv20.aql
@@ -0,0 +1,50 @@
+/*
+ * Description  : Test various syntax for dataset access
+ *              : Using parentheses for dataset access is now optional
+ *              : New syntax can use fully qualified names to access datasets.
+ * Expected Res : Success
+ * Date         : 6th March 2013
+ */
+
+drop dataverse student if exists;
+drop dataverse teacher if exists;
+
+create dataverse student;
+create dataverse teacher;
+
+write output to nc1:"rttest/cross-dataverse_cross-dv20.adm";
+
+create type student.stdType as open {
+id : int32,
+name : string,
+age : int32,
+sex : string,
+dept : string
+}
+
+create type teacher.tchrType as open {
+id : int32,
+name : string,
+age : int32,
+sex : string,
+dept : string
+}
+
+create dataset student.ugdstd(stdType) primary key id;
+create dataset student.gdstd(stdType) primary key id;
+create dataset teacher.prof(tchrType) primary key id;
+create dataset teacher.pstdoc(tchrType) primary key id;
+
+insert into dataset student.ugdstd({"id":457,"name":"John Doe","age":22,"sex":"M","dept":"Dance"});
+
+insert into dataset student.gdstd({"id":418,"name":"John Smith","age":26,"sex":"M","dept":"Economics"});
+
+insert into dataset teacher.prof({"id":152,"name":"John Meyer","age":42,"sex":"M","dept":"History"});
+
+insert into dataset teacher.pstdoc({"id":259,"name":"Sophia Reece","age":36,"sex":"F","dept":"Anthropology"});
+
+for $s in dataset student.ugdstd
+for $p in dataset('teacher.prof')
+for $a in dataset("student.gdstd")
+for $b in dataset teacher.pstdoc
+return {"ug-student":$s,"prof":$p,"grd-student":$a,"postdoc":$b}
diff --git a/asterix-app/src/test/resources/runtimets/queries/dml/delete-syntax-change.aql b/asterix-app/src/test/resources/runtimets/queries/dml/delete-syntax-change.aql
new file mode 100644
index 0000000..fb9682d
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/dml/delete-syntax-change.aql
@@ -0,0 +1,43 @@
+/*
+ * Description  : Test variant syntax for delete
+ *              : Ending semi-colon is optional for delete
+ * Expected Res : Success
+ * Date         : 6th March 2013
+ */
+
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+create type LineItemType as closed {
+  l_orderkey: int32, 
+  l_partkey: int32, 
+  l_suppkey: int32, 
+  l_linenumber: int32, 
+  l_quantity: int32, 
+  l_extendedprice: double,
+  l_discount: double, 
+  l_tax: double,
+  l_returnflag: string, 
+  l_linestatus: string, 
+  l_shipdate: string,
+  l_commitdate: string, 
+  l_receiptdate: string, 
+  l_shipinstruct: string, 
+  l_shipmode: string, 
+  l_comment: string
+}
+
+create dataset LineItem(LineItemType)
+  primary key l_orderkey, l_linenumber;
+
+load dataset LineItem 
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/tpch0.001/lineitem.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
+
+delete $l from dataset LineItem where $l.l_orderkey>=10
+
+write output to nc1:"rttest/dml_delete-syntax-change.adm";      
+for $c in dataset('LineItem')
+order by $c.l_orderkey, $c.l_linenumber
+return $c 
diff --git a/asterix-app/src/test/resources/runtimets/queries/dml/insert-syntax.aql b/asterix-app/src/test/resources/runtimets/queries/dml/insert-syntax.aql
new file mode 100644
index 0000000..58177d3
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/dml/insert-syntax.aql
@@ -0,0 +1,35 @@
+/* 
+ * Test case Name  : insert-syntax-change.aql
+ * Description     : verify various AQL syntax for insert
+ * Expected Result : Success
+ * Date         : 6th March 2013
+ */
+
+drop dataverse testdv2 if exists;
+create dataverse testdv2;
+use dataverse testdv2;
+
+create type testtype as open {
+  id: int32,
+  name: string
+}
+
+create dataset testds(testtype) primary key id;
+ 
+ insert into dataset testds (
+ { "id": 1, "name": "Person One", "hobbies": {{"Rock", "Metal"}}}
+ );
+ 
+ insert into dataset testds (
+ { "id": 2, "name": "Person Two", "hobbies": {{"Rock", "Jazz"}}}
+ )
+ 
+ insert into dataset testds { "id": 3, "name": "Person Three", "hobbies": {{"Blues"}}};
+ 
+ insert into dataset testds { "id": 4, "name": "Person Four", "hobbies": {{"Metal", "Jazz"}}}
+
+write output to nc1:"rttest/dml_insert-syntax.adm";
+
+for $d in dataset("testds")
+order by $d.id
+return $d
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/queries/scan/alltypes_02.aql b/asterix-app/src/test/resources/runtimets/queries/scan/alltypes_02.aql
new file mode 100644
index 0000000..7f01c3e
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/scan/alltypes_02.aql
@@ -0,0 +1,48 @@
+/*
+ * Description  : Test variant syntax for dataset access (scan)
+ *              : using parentheses and quotes is optional
+ * Expected Res : Success
+ * Date         : 6th March 2013
+ */
+
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+create type AddressType as open {
+  number: int32, 
+  street: string,
+  city: string
+}
+
+create type AllType as open {
+  id: int32,
+  name: string,
+  age: float,
+  salary: double,
+  married: boolean,
+  interests: {{string}},
+  children: [string],
+  address: AddressType,
+  dob: date,
+  time: time,
+  datetime: datetime,
+  duration: duration,
+  location2d: point,
+  location3d: point3d,
+  line: line,
+  polygon: polygon,
+  circle: circle
+
+  // binary
+  // union
+}
+
+create external dataset All(AllType)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/nontagged/allData.json"),("format"="adm"));
+        
+write output to nc1:"rttest/scan_alltypes_02.adm";
+      
+for $a in dataset All
+return $a 
diff --git a/asterix-app/src/test/resources/runtimets/queries/scan/invalid-scan-syntax.aql b/asterix-app/src/test/resources/runtimets/queries/scan/invalid-scan-syntax.aql
new file mode 100644
index 0000000..254ecc4
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/scan/invalid-scan-syntax.aql
@@ -0,0 +1,22 @@
+/*
+ * Description    : Tests syntax error for the changed dataset access syntax
+ * Expected Result: Syntax Error from parser
+ * Date: 			March 6th 2013
+ */
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+create type Employee as closed {
+id: int32,
+name: string,
+salary: int32
+}
+
+create dataset Office(Employee)
+primary key id;
+
+insert into dataset Office({"id": 1, "name": "clerk#1", "salary":120000});
+
+for $t in dataset 'test.Office'
+return $t
diff --git a/asterix-app/src/test/resources/runtimets/queries/temp/accessors/accessors.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/temp/accessors/accessors.1.ddl.aql
deleted file mode 100644
index 4fcf8c9..0000000
--- a/asterix-app/src/test/resources/runtimets/queries/temp/accessors/accessors.1.ddl.aql
+++ /dev/null
@@ -1,9 +0,0 @@
-/*
- * Description      :   Check temporal accessors for different types
- * Expected Result  :   Success
- * Date             :   31st Aug, 2012
- */
-
-drop dataverse test if exists;
-create dataverse test;
-
diff --git a/asterix-app/src/test/resources/runtimets/queries/temp/accessors/accessors.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/temp/accessors/accessors.2.update.aql
deleted file mode 100644
index 1e40f3d..0000000
--- a/asterix-app/src/test/resources/runtimets/queries/temp/accessors/accessors.2.update.aql
+++ /dev/null
@@ -1,6 +0,0 @@
-/*
- * Description      :   Check temporal accessors for different types
- * Expected Result  :   Success
- * Date             :   31st Aug, 2012
- */
-
diff --git a/asterix-app/src/test/resources/runtimets/queries/temp/adjust_timezone/adjust_timezone.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/temp/adjust_timezone/adjust_timezone.1.ddl.aql
deleted file mode 100644
index 88773ee..0000000
--- a/asterix-app/src/test/resources/runtimets/queries/temp/adjust_timezone/adjust_timezone.1.ddl.aql
+++ /dev/null
@@ -1,9 +0,0 @@
-/*
- * Description      :   Check the adjust-timezone functions
- * Expected Result  :   Success
- * Date             :   15th Oct, 2012
- */
-
-drop dataverse test if exists;
-create dataverse test;
-
diff --git a/asterix-app/src/test/resources/runtimets/queries/temp/adjust_timezone/adjust_timezone.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/temp/adjust_timezone/adjust_timezone.2.update.aql
deleted file mode 100644
index 2a84907..0000000
--- a/asterix-app/src/test/resources/runtimets/queries/temp/adjust_timezone/adjust_timezone.2.update.aql
+++ /dev/null
@@ -1,6 +0,0 @@
-/*
- * Description      :   Check the adjust-timezone functions
- * Expected Result  :   Success
- * Date             :   15th Oct, 2012
- */
-
diff --git a/asterix-app/src/test/resources/runtimets/queries/temp/calendar_duration/calendar_duration.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/temp/calendar_duration/calendar_duration.1.ddl.aql
deleted file mode 100644
index 25db981..0000000
--- a/asterix-app/src/test/resources/runtimets/queries/temp/calendar_duration/calendar_duration.1.ddl.aql
+++ /dev/null
@@ -1,9 +0,0 @@
-/*
- * Description      :   Check the calendar-duration functions
- * Expected Result  :   Success
- * Date             :   15th Oct, 2012
- */
-
-drop dataverse test if exists;
-create dataverse test;
-
diff --git a/asterix-app/src/test/resources/runtimets/queries/temp/calendar_duration/calendar_duration.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/temp/calendar_duration/calendar_duration.2.update.aql
deleted file mode 100644
index 7e27a79..0000000
--- a/asterix-app/src/test/resources/runtimets/queries/temp/calendar_duration/calendar_duration.2.update.aql
+++ /dev/null
@@ -1,6 +0,0 @@
-/*
- * Description      :   Check the calendar-duration functions
- * Expected Result  :   Success
- * Date             :   15th Oct, 2012
- */
-
diff --git a/asterix-app/src/test/resources/runtimets/queries/temp/calendar_duration/calendar_duration.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/temp/calendar_duration/calendar_duration.3.query.aql
deleted file mode 100644
index f56e08f..0000000
--- a/asterix-app/src/test/resources/runtimets/queries/temp/calendar_duration/calendar_duration.3.query.aql
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Description      :   Check the calendar-duration functions
- * Expected Result  :   Success
- * Date             :   15th Oct, 2012
- */
-
-use dataverse test;
-
-let $t1 := datetime("1987-11-19T23:49:23.938")
-let $t2 := date("-1328-10-23")
-let $dr1 := duration("P7382DT39283M3921.329S")
-let $dr2 := duration("-PT63H398212M3219.328S")
-let $dr3 := duration("P1Y90M")
-let $dr4 := duration("-P3Y89M4089DT47382.983S")
-let $cdr1 := calendar-duration-from-datetime($t1, $dr1)
-let $cdr2 := calendar-duration-from-datetime($t1, $dr2)
-let $cdr3 := calendar-duration-from-datetime($t1, $dr3)
-let $cdr4 := calendar-duration-from-datetime($t1, $dr4)
-let $cdr5 := calendar-duration-from-date($t2, $dr1)
-let $cdr6 := calendar-duration-from-date($t2, $dr2)
-let $cdr7 := calendar-duration-from-date($t2, $dr3)
-let $cdr8 := calendar-duration-from-date($t2, $dr4)
-
-return { "cduration1":$cdr1, "cduration2":$cdr2, "cduration3":$cdr3, "cduration4":$cdr4, "cduration5":$cdr5, "cduration6":$cdr6, "cduration7":$cdr7, "cduration8":$cdr8 }
diff --git a/asterix-app/src/test/resources/runtimets/queries/temp/date_functions/date_functions.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/temp/date_functions/date_functions.1.ddl.aql
deleted file mode 100644
index ac6c3f8..0000000
--- a/asterix-app/src/test/resources/runtimets/queries/temp/date_functions/date_functions.1.ddl.aql
+++ /dev/null
@@ -1,8 +0,0 @@
-/*
- * Description      :   Check temporal functions for date type
- * Expected Result  :   Success
- * Date             :   24th Sep, 2012
- */
-drop dataverse test if exists;
-create dataverse test;
-
diff --git a/asterix-app/src/test/resources/runtimets/queries/temp/date_functions/date_functions.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/temp/date_functions/date_functions.2.update.aql
deleted file mode 100644
index 0a4fbb2..0000000
--- a/asterix-app/src/test/resources/runtimets/queries/temp/date_functions/date_functions.2.update.aql
+++ /dev/null
@@ -1,6 +0,0 @@
-/*
- * Description      :   Check temporal functions for date type
- * Expected Result  :   Success
- * Date             :   24th Sep, 2012
- */
-
diff --git a/asterix-app/src/test/resources/runtimets/queries/temp/datetime_functions/datetime_functions.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/temp/datetime_functions/datetime_functions.1.ddl.aql
deleted file mode 100644
index d984a78..0000000
--- a/asterix-app/src/test/resources/runtimets/queries/temp/datetime_functions/datetime_functions.1.ddl.aql
+++ /dev/null
@@ -1,8 +0,0 @@
-/*
- * Description      :   Check temporal functions for datetime
- * Expected Result  :   Success
- * Date             :   24th Sep, 2012
- */
-
-drop dataverse test if exists;
-create dataverse test;
diff --git a/asterix-app/src/test/resources/runtimets/queries/temp/datetime_functions/datetime_functions.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/temp/datetime_functions/datetime_functions.2.update.aql
deleted file mode 100644
index 05af838..0000000
--- a/asterix-app/src/test/resources/runtimets/queries/temp/datetime_functions/datetime_functions.2.update.aql
+++ /dev/null
@@ -1,6 +0,0 @@
-/*
- * Description      :   Check temporal functions for datetime
- * Expected Result  :   Success
- * Date             :   24th Sep, 2012
- */
-
diff --git a/asterix-app/src/test/resources/runtimets/queries/temp/insert_from_delimited_ds/insert_from_delimited_ds.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/temp/insert_from_delimited_ds/insert_from_delimited_ds.1.ddl.aql
deleted file mode 100644
index 2e83832..0000000
--- a/asterix-app/src/test/resources/runtimets/queries/temp/insert_from_delimited_ds/insert_from_delimited_ds.1.ddl.aql
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * Test case name: date-insert.aql
- * Description: verify insertion operation for date type
- * Expected result: success
- */
- 
-drop dataverse testdvt if exists;
-create dataverse testdvt;
-
-use dataverse test;
-
-create type testtype as closed {
-  id: string,
-  dateField: date,
-  timeField: time,
-  datetimeField: datetime,
-  durationField: duration
-}
-
diff --git a/asterix-app/src/test/resources/runtimets/queries/temp/insert_from_delimited_ds/insert_from_delimited_ds.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/temp/insert_from_delimited_ds/insert_from_delimited_ds.2.update.aql
deleted file mode 100644
index 48e4150..0000000
--- a/asterix-app/src/test/resources/runtimets/queries/temp/insert_from_delimited_ds/insert_from_delimited_ds.2.update.aql
+++ /dev/null
@@ -1,12 +0,0 @@
-/*
- * Test case name: date-insert.aql
- * Description: verify insertion operation for date type
- * Expected result: success
- */
-
-use dataverse testdvt;
-
-create external dataset testds(testtype)
-using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
-(("path"="nc1://data/temporal/temporalData.txt"),("format"="delimited-text"),("delimiter"="|"));
-
diff --git a/asterix-app/src/test/resources/runtimets/queries/temp/insert_from_delimited_ds/insert_from_delimited_ds.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/temp/insert_from_delimited_ds/insert_from_delimited_ds.3.query.aql
deleted file mode 100644
index 2c21329..0000000
--- a/asterix-app/src/test/resources/runtimets/queries/temp/insert_from_delimited_ds/insert_from_delimited_ds.3.query.aql
+++ /dev/null
@@ -1,10 +0,0 @@
-/*
- * Test case name: date-insert.aql
- * Description: verify insertion operation for date type
- * Expected result: success
- */
-
-use dataverse testdvt;
-
-for $r in dataset("testds") 
-return {"date": $r.dateField, "time": $r.timeField, "datetime": $r.datetimeField, "duration": $r.durationField }
diff --git a/asterix-app/src/test/resources/runtimets/queries/temp/insert_from_ext_ds/insert_from_ext_ds.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/temp/insert_from_ext_ds/insert_from_ext_ds.1.ddl.aql
deleted file mode 100644
index c5befee..0000000
--- a/asterix-app/src/test/resources/runtimets/queries/temp/insert_from_ext_ds/insert_from_ext_ds.1.ddl.aql
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Test case name: date-insert.aql
- * Description: verify insertion operation for date type
- * Expected result: success
- */
- 
-drop dataverse testdvt if exists;
-create dataverse testdvt;
-
-use dataverse testdvt;
-
-create type testtype as open {
-  id: string,
-  dateField: date?,
-  timeField: time?,
-  datetimeField: datetime?,
-  durationField: duration?,
-  intervalField: interval?
-}
-
diff --git a/asterix-app/src/test/resources/runtimets/queries/temp/insert_from_ext_ds/insert_from_ext_ds.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/temp/insert_from_ext_ds/insert_from_ext_ds.2.update.aql
deleted file mode 100644
index 9f92e49..0000000
--- a/asterix-app/src/test/resources/runtimets/queries/temp/insert_from_ext_ds/insert_from_ext_ds.2.update.aql
+++ /dev/null
@@ -1,12 +0,0 @@
-/*
- * Test case name: date-insert.aql
- * Description: verify insertion operation for date type
- * Expected result: success
- */
- 
-use dataverse testdvt;
-
-create external dataset testds(testtype)
-using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
-(("path"="nc1://data/temporal/temporalData.json"),("format"="adm"));
-
diff --git a/asterix-app/src/test/resources/runtimets/queries/temp/insert_from_ext_ds/insert_from_ext_ds.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/temp/insert_from_ext_ds/insert_from_ext_ds.3.query.aql
deleted file mode 100644
index cd8731e..0000000
--- a/asterix-app/src/test/resources/runtimets/queries/temp/insert_from_ext_ds/insert_from_ext_ds.3.query.aql
+++ /dev/null
@@ -1,10 +0,0 @@
-/*
- * Test case name: date-insert.aql
- * Description: verify insertion operation for date type
- * Expected result: success
- */
-
-use dataverse testdvt;
-
-for $r in dataset("testds") 
-return {"date": $r.dateField, "time": $r.timeField, "datetime": $r.datetimeField, "duration": $r.durationField, "interval": $r.intervalField }
diff --git a/asterix-app/src/test/resources/runtimets/queries/temp/interval_functions/interval_functions.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/temp/interval_functions/interval_functions.1.ddl.aql
deleted file mode 100644
index dc64af7..0000000
--- a/asterix-app/src/test/resources/runtimets/queries/temp/interval_functions/interval_functions.1.ddl.aql
+++ /dev/null
@@ -1,9 +0,0 @@
-/*
- * Description      :   Check temporal functions for interval
- * Expected Result  :   Success
- * Date             :   2nd Nov, 2012
- */
-
-drop dataverse test if exists;
-create dataverse test;
-
diff --git a/asterix-app/src/test/resources/runtimets/queries/temp/interval_functions/interval_functions.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/temp/interval_functions/interval_functions.2.update.aql
deleted file mode 100644
index 4330ebd..0000000
--- a/asterix-app/src/test/resources/runtimets/queries/temp/interval_functions/interval_functions.2.update.aql
+++ /dev/null
@@ -1,6 +0,0 @@
-/*
- * Description      :   Check temporal functions for interval
- * Expected Result  :   Success
- * Date             :   2nd Nov, 2012
- */
-
diff --git a/asterix-app/src/test/resources/runtimets/queries/temp/time_functions/time_functions.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/temp/time_functions/time_functions.1.ddl.aql
deleted file mode 100644
index 44244e0..0000000
--- a/asterix-app/src/test/resources/runtimets/queries/temp/time_functions/time_functions.1.ddl.aql
+++ /dev/null
@@ -1,9 +0,0 @@
-/*
- * Description      :   Check temporal functions for time
- * Expected Result  :   Success
- * Date             :   24th Sep, 2012
- */
-
-drop dataverse test if exists;
-create dataverse test;
-
diff --git a/asterix-app/src/test/resources/runtimets/queries/temp/time_functions/time_functions.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/temp/time_functions/time_functions.2.update.aql
deleted file mode 100644
index 2024d63..0000000
--- a/asterix-app/src/test/resources/runtimets/queries/temp/time_functions/time_functions.2.update.aql
+++ /dev/null
@@ -1,6 +0,0 @@
-/*
- * Description      :   Check temporal functions for time
- * Expected Result  :   Success
- * Date             :   24th Sep, 2012
- */
-
diff --git a/asterix-app/src/test/resources/runtimets/queries/temp/accessors/accessors.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/temporal/accessors.aql
similarity index 91%
rename from asterix-app/src/test/resources/runtimets/queries/temp/accessors/accessors.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/temporal/accessors.aql
index 4ae1853..7830438 100644
--- a/asterix-app/src/test/resources/runtimets/queries/temp/accessors/accessors.3.query.aql
+++ b/asterix-app/src/test/resources/runtimets/queries/temporal/accessors.aql
@@ -4,8 +4,12 @@
  * Date             :   31st Aug, 2012
  */
 
+drop dataverse test if exists;
+create dataverse test;
 use dataverse test;
 
+write output to nc1:"rttest/temporal_accessors.adm";
+
 let $c1 := date("2010-10-30")
 let $c2 := datetime("1987-11-19T23:49:23.938")
 let $c3 := date("-1987-11-19")
diff --git a/asterix-app/src/test/resources/runtimets/queries/temp/adjust_timezone/adjust_timezone.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/temporal/adjust_timezone.aql
similarity index 76%
rename from asterix-app/src/test/resources/runtimets/queries/temp/adjust_timezone/adjust_timezone.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/temporal/adjust_timezone.aql
index 0324094..13c2487 100644
--- a/asterix-app/src/test/resources/runtimets/queries/temp/adjust_timezone/adjust_timezone.3.query.aql
+++ b/asterix-app/src/test/resources/runtimets/queries/temporal/adjust_timezone.aql
@@ -4,10 +4,14 @@
  * Date             :   15th Oct, 2012
  */
 
+drop dataverse test if exists;
+create dataverse test;
 use dataverse test;
 
+write output to nc1:"rttest/temporal_adjust_timezone.adm";
+
 let $t1 := time("20:15:10.327")
 let $dt1 := datetime("2010-10-23T01:12:13.329Z")
 let $s1 := adjust-time-for-timezone($t1, "+0800")
 let $s2 := adjust-datetime-for-timezone($dt1, "-0615")
-return { "string1" : $s1, "string2" : $s2 }
+return { "string1" : $s1, "string2" : $s2 }
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/queries/temporal/calendar_duration.aql b/asterix-app/src/test/resources/runtimets/queries/temporal/calendar_duration.aql
new file mode 100644
index 0000000..2d0c91b
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/temporal/calendar_duration.aql
@@ -0,0 +1,52 @@
+/*
+ * Description      :   Check the calendar-duration functions
+ * Expected Result  :   Success
+ * Date             :   15th Oct, 2012
+ */
+
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+write output to nc1:"rttest/temporal_calendar_duration.adm";
+
+let $t1 := datetime("1987-11-19T23:49:23.938")
+let $t2 := date("-1328-10-23")
+let $dr1 := duration("P7382DT39283M3921.329S")
+let $dr2 := duration("-PT63H398212M3219.328S")
+let $dr3 := duration("P1Y90M")
+let $dr4 := duration("-P3Y89M4089DT47382.983S")
+let $cdr1 := calendar-duration-from-datetime($t1, $dr1)
+let $dt1 := add-datetime-duration($t1, $dr1)
+let $dtt1 := add-datetime-duration($t1, $cdr1)
+let $c1 := $dt1 = $dtt1
+let $cdr2 := calendar-duration-from-datetime($t1, $dr2)
+let $dt2 := add-datetime-duration($t1, $dr2)
+let $dtt2 := add-datetime-duration($t1, $cdr2)
+let $c2 := $dt2 = $dtt2
+let $cdr3 := calendar-duration-from-datetime($t1, $dr3)
+let $dt3 := add-datetime-duration($t1, $dr3)
+let $dtt3 := add-datetime-duration($t1, $cdr3)
+let $c3 := $dt3 = $dtt3
+let $cdr4 := calendar-duration-from-datetime($t1, $dr4)
+let $dt4 := add-datetime-duration($t1, $dr4)
+let $dtt4 := add-datetime-duration($t1, $cdr4)
+let $c4 := $dt4 = $dtt4
+let $cdr5 := calendar-duration-from-date($t2, $dr1)
+let $dt5 := add-date-duration($t2, $dr1)
+let $dtt5 := add-date-duration($t2, $cdr5)
+let $c5 := $dt5 = $dtt5
+let $cdr6 := calendar-duration-from-date($t2, $dr2)
+let $dt6 := add-date-duration($t2, $dr2)
+let $dtt6 := add-date-duration($t2, $cdr6)
+let $c6 := $dt6 = $dtt6
+let $cdr7 := calendar-duration-from-date($t2, $dr3)
+let $dt7 := add-date-duration($t2, $dr3)
+let $dtt7 := add-date-duration($t2, $cdr7)
+let $c7 := $dt7 = $dtt7
+let $cdr8 := calendar-duration-from-date($t2, $dr4)
+let $dt8 := add-date-duration($t2, $dr4)
+let $dtt8 := add-date-duration($t2, $cdr8)
+let $c8 := $dt8 = $dtt8
+
+return { "cduration1":$cdr1, "c1":$c1, "cduration2":$cdr2, "c2":$c2, "cduration3":$cdr3, "c3":$c3, "cduration4":$cdr4, "c4":$c4, "cduration5":$cdr5, "c5":$c5, "cduration6":$cdr6, "c6":$c6, "cduration7":$cdr7, "c7":$c7, "cduration8":$cdr8, "c8":$c8 }
diff --git a/asterix-app/src/test/resources/runtimets/queries/temp/date_functions/date_functions.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/temporal/date_functions.aql
similarity index 66%
rename from asterix-app/src/test/resources/runtimets/queries/temp/date_functions/date_functions.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/temporal/date_functions.aql
index 2f93bcb..4f9ef5c 100644
--- a/asterix-app/src/test/resources/runtimets/queries/temp/date_functions/date_functions.3.query.aql
+++ b/asterix-app/src/test/resources/runtimets/queries/temporal/date_functions.aql
@@ -3,8 +3,12 @@
  * Expected Result  :   Success
  * Date             :   24th Sep, 2012
  */
+drop dataverse test if exists;
+create dataverse test;
 use dataverse test;
 
+write output to nc1:"rttest/temporal_date_functions.adm";
+
 let $d1 := date-from-unix-time-in-days(15600)
 let $dt1 := datetime("1327-12-02T23:35:49.938Z")
 let $d2 := date-from-datetime($dt1)
@@ -12,9 +16,11 @@
 let $d3 := date-from-datetime($dt2)
 let $dr1 := duration("-P2Y1M90DT30H")
 let $d4 := add-date-duration($d1, $dr1)
+let $c1 := $d1 = add-date-duration($d4, subtract-date($d1, $d4))
 let $dr2 := duration("P300Y900MT360000M")
 let $d5 := add-date-duration($d2, $dr2)
+let $c2 := $d2 = add-date-duration($d5, subtract-date($d2, $d5))
 let $dr3 := subtract-date($d5, $d2)
 let $dr4 := subtract-date($d4, $d1)
 
-return { "date1" : $d1, "date2" : $d2, "date3" : $d3, "date4" : $d4, "date5" : $d5, "duration1" : $dr3, "duration2" : $dr4  }
+return { "date1" : $d1, "date2" : $d2, "date3" : $d3, "date4" : $d4, "date5" : $d5, "duration1" : $dr3, "duration2" : $dr4, "c1" : $c1, "c2" : $c2  }
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/queries/temp/datetime_functions/datetime_functions.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/temporal/datetime_functions.aql
similarity index 61%
rename from asterix-app/src/test/resources/runtimets/queries/temp/datetime_functions/datetime_functions.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/temporal/datetime_functions.aql
index 36df410..cc68789 100644
--- a/asterix-app/src/test/resources/runtimets/queries/temp/datetime_functions/datetime_functions.3.query.aql
+++ b/asterix-app/src/test/resources/runtimets/queries/temporal/datetime_functions.aql
@@ -4,13 +4,18 @@
  * Date             :   24th Sep, 2012
  */
 
+drop dataverse test if exists;
+create dataverse test;
 use dataverse test;
 
+write output to nc1:"rttest/temporal_datetime_functions.adm";
+
 let $dt1 := datetime-from-unix-time-in-ms(956007429)
 let $d1 := date("1327-12-02")
-let $t1 := time("23:35:49.938Z")
+let $t1 := time("15:35:49.938-0800")
 let $dt2 := datetime-from-date-time($d1, $t1)
 let $dr1 := subtract-datetime($dt2, $dt1)
 let $dt3 := add-datetime-duration($dt1, $dr1)
+let $c1 := $dt1 = add-datetime-duration($dt3, subtract-datetime($dt1, $dt3))
 
-return { "datetime1" : $dt1, "datetime2" : $dt2, "datetime3" : $dt3, "duration1" : $dr1 }
+return { "datetime1" : $dt1, "datetime2" : $dt2, "datetime3" : $dt3, "duration1" : $dr1, "c1" : $c1 }
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/queries/temporal/insert_from_delimited_ds.aql b/asterix-app/src/test/resources/runtimets/queries/temporal/insert_from_delimited_ds.aql
new file mode 100644
index 0000000..344db02
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/temporal/insert_from_delimited_ds.aql
@@ -0,0 +1,26 @@
+/*
+ * Test case name: date-insert.aql
+ * Description: verify insertion operation for date type
+ * Expected result: success
+ */
+ 
+drop dataverse testdvt if exists;
+create dataverse testdvt;
+use dataverse testdvt;
+
+create type testtype as closed {
+  id: string,
+  dateField: date,
+  timeField: time,
+  datetimeField: datetime,
+  durationField: duration
+}
+
+write output to nc1:"rttest/temporal_insert_from_delimited_ds.adm";
+
+create external dataset testds(testtype)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/temporal/temporalData.txt"),("format"="delimited-text"),("delimiter"="|"));
+
+for $r in dataset("testds") 
+return {"date": $r.dateField, "time": $r.timeField, "datetime": $r.datetimeField, "duration": $r.durationField }
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/queries/temporal/insert_from_ext_ds.aql b/asterix-app/src/test/resources/runtimets/queries/temporal/insert_from_ext_ds.aql
new file mode 100644
index 0000000..0a3903f
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/temporal/insert_from_ext_ds.aql
@@ -0,0 +1,27 @@
+/*
+ * Test case name: date-insert.aql
+ * Description: verify insertion operation for date type
+ * Expected result: success
+ */
+ 
+drop dataverse testdvt if exists;
+create dataverse testdvt;
+use dataverse testdvt;
+
+create type testtype as open {
+  id: string,
+  dateField: date?,
+  timeField: time?,
+  datetimeField: datetime?,
+  durationField: duration?,
+  intervalField: interval?
+}
+
+write output to nc1:"rttest/temporal_insert_from_ext_ds.adm";
+
+create external dataset testds(testtype)
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/temporal/temporalData.json"),("format"="adm"));
+
+for $r in dataset("testds") 
+return {"date": $r.dateField, "time": $r.timeField, "datetime": $r.datetimeField, "duration": $r.durationField, "interval": $r.intervalField }
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/queries/temp/interval_functions/interval_functions.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/temporal/interval_functions.aql
similarity index 74%
rename from asterix-app/src/test/resources/runtimets/queries/temp/interval_functions/interval_functions.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/temporal/interval_functions.aql
index abda416..5831468 100644
--- a/asterix-app/src/test/resources/runtimets/queries/temp/interval_functions/interval_functions.3.query.aql
+++ b/asterix-app/src/test/resources/runtimets/queries/temporal/interval_functions.aql
@@ -4,11 +4,15 @@
  * Date             :   2nd Nov, 2012
  */
 
+drop dataverse test if exists;
+create dataverse test;
 use dataverse test;
 
+write output to nc1:"rttest/temporal_interval_functions.adm";
+
 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-06-30", "2013-01-01")
+let $itv3 := interval-from-date("2010-12-21", "2013-01-01")
 let $blnBefore1 := interval-before($itv1, $itv2)
 let $blnAfter1 := interval-after($itv2, $itv1)
 let $blnBefore2 := interval-before($itv1, $itv3)
@@ -24,11 +28,11 @@
 
 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", "12:33:00")
+let $itv9 := interval-from-time("01:32:49", "17:48:19")
 let $blnOverlaps1 := interval-overlaps($itv7, $itv8)
 let $blnOverlapped1 := interval-overlapped-by($itv8, $itv7)
-let $blnOverlaps2 := interval-overlaps($itv8, $itv7)
-let $blnOverlapped2 := interval-overlapped-by($itv7, $itv8)
+let $blnOverlaps2 := interval-overlaps($itv9, $itv8)
+let $blnOverlapped2 := interval-overlapped-by($itv8, $itv9)
 let $blnOverlap1 := overlap($itv9, $itv7)
 let $blnOverlap2 := overlap($itv9, $itv8)
 
@@ -38,10 +42,13 @@
 let $blnStartedBy1 := interval-started-by($itv1, $itv10)
 let $blnStartedBy2 := interval-started-by($itv10, $itv2)
 
-let $blnCovers1 := interval-covers($itv6, $itv4)
-let $blnCovers2 := interval-covers($itv6, $itv5)
-let $blnCoveredBy1 := interval-covered-by($itv4, $itv6)
-let $blnCoveredBy2 := interval-covered-by($itv5, $itv6)
+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 $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 $blnEnds1 := interval-ends($itv11, $itv7)
@@ -49,4 +56,4 @@
 let $blnEndedBy1 := interval-ended-by($itv7, $itv11)
 let $blnEndedBy2 := interval-ended-by($itv8, $itv11)
 
-return { "before1" : $blnBefore1, "before2" : $blnBefore2, "after1" : $blnAfter1, "after2" : $blnAfter2, "meet1" : $blnMeet1, "meet2" : $blnMeet2, "metby1" : $blnMetBy1, "metby2" : $blnMetBy2, "overlaps1" : $blnOverlaps1, "overlaps2" : $blnOverlaps2, "overlapped1" : $blnOverlapped1, "overlapped2" : $blnOverlapped2, "overlap1" : $blnOverlap1, "overlap2" : $blnOverlap2, "starts1" : $blnStarts1, "starts2" : $blnStarts2, "startedby1" : $blnStartedBy1, "startedby2" : $blnStartedBy2, "covers1" : $blnCovers1, "covers2" : $blnCovers2, "coveredby1" : $blnCoveredBy1, "coveredby2" : $blnCoveredBy2, "ends1" : $blnEnds1, "ends2" : $blnEnds2, "endedby1" : $blnEndedBy1, "endedby2" : $blnEndedBy2 }
+return { "before1" : $blnBefore1, "before2" : $blnBefore2, "after1" : $blnAfter1, "after2" : $blnAfter2, "meet1" : $blnMeet1, "meet2" : $blnMeet2, "metby1" : $blnMetBy1, "metby2" : $blnMetBy2, "overlaps1" : $blnOverlaps1, "overlaps2" : $blnOverlaps2, "overlapped1" : $blnOverlapped1, "overlapped2" : $blnOverlapped2, "overlap1" : $blnOverlap1, "overlap2" : $blnOverlap2, "starts1" : $blnStarts1, "starts2" : $blnStarts2, "startedby1" : $blnStartedBy1, "startedby2" : $blnStartedBy2, "covers1" : $blnCovers1, "covers2" : $blnCovers2, "coveredby1" : $blnCoveredBy1, "coveredby2" : $blnCoveredBy2, "ends1" : $blnEnds1, "ends2" : $blnEnds2, "endedby1" : $blnEndedBy1, "endedby2" : $blnEndedBy2 }
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/queries/temp/time_functions/time_functions.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/temporal/time_functions.aql
similarity index 68%
rename from asterix-app/src/test/resources/runtimets/queries/temp/time_functions/time_functions.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/temporal/time_functions.aql
index 9794bb3..c1d39fc 100644
--- a/asterix-app/src/test/resources/runtimets/queries/temp/time_functions/time_functions.3.query.aql
+++ b/asterix-app/src/test/resources/runtimets/queries/temporal/time_functions.aql
@@ -4,8 +4,12 @@
  * Date             :   24th Sep, 2012
  */
 
+drop dataverse test if exists;
+create dataverse test;
 use dataverse test;
 
+write output to nc1:"rttest/temporal_time_functions.adm";
+
 let $t1 := time-from-unix-time-in-ms(1560074)
 let $dt1 := datetime("1327-12-02T23:35:49.938Z")
 let $t2 := time-from-datetime($dt1)
@@ -13,12 +17,14 @@
 let $t3 := time-from-datetime($dt2)
 let $dr1 := duration("-PT30H")
 let $t4 := add-time-duration($t1, $dr1)
+let $c1 := $t1 = add-time-duration($t4, subtract-time($t1, $t4))
 let $dr2 := duration("PT36M")
 let $t5 := add-time-duration($t2, $dr2)
+let $c2 := $t2 = add-time-duration($t5, subtract-time($t2, $t5))
 let $dr3 := subtract-time($t5, $t2)
 let $dr4 := subtract-time($t4, $t1)
 let $ct := current-time()
 let $cd := current-date()
 let $cdt := current-datetime()
 
-return { "time1" : $t1, "time2" : $t2, "time3" : $t3, "time4" : $t4, "time5" : $t5, "duration1" : $dr3, "duration2" : $dr4  }
+return { "time1" : $t1, "time2" : $t2, "time3" : $t3, "time4" : $t4, "time5" : $t5, "duration1" : $dr3, "duration2" : $dr4, "c1" : $c1, "c2" : $c2  }
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/results/cross-dataverse/cross-dv20.adm b/asterix-app/src/test/resources/runtimets/results/cross-dataverse/cross-dv20.adm
new file mode 100644
index 0000000..83de609
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/results/cross-dataverse/cross-dv20.adm
@@ -0,0 +1 @@
+{ "ug-student": { "id": 457, "name": "John Doe", "age": 22, "sex": "M", "dept": "Dance" }, "prof": { "id": 152, "name": "John Meyer", "age": 42, "sex": "M", "dept": "History" }, "grd-student": { "id": 418, "name": "John Smith", "age": 26, "sex": "M", "dept": "Economics" }, "postdoc": { "id": 259, "name": "Sophia Reece", "age": 36, "sex": "F", "dept": "Anthropology" } }
diff --git a/asterix-app/src/test/resources/runtimets/results/dml/delete-syntax-change.adm b/asterix-app/src/test/resources/runtimets/results/dml/delete-syntax-change.adm
new file mode 100644
index 0000000..7039cfe
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/results/dml/delete-syntax-change.adm
@@ -0,0 +1,25 @@
+{ "l_orderkey": 1, "l_partkey": 156, "l_suppkey": 4, "l_linenumber": 1, "l_quantity": 17, "l_extendedprice": 17954.55d, "l_discount": 0.04d, "l_tax": 0.02d, "l_returnflag": "N", "l_linestatus": "O", "l_shipdate": "1996-03-13", "l_commitdate": "1996-02-12", "l_receiptdate": "1996-03-22", "l_shipinstruct": "DELIVER IN PERSON", "l_shipmode": "TRUCK", "l_comment": "egular courts above the" }
+{ "l_orderkey": 1, "l_partkey": 68, "l_suppkey": 9, "l_linenumber": 2, "l_quantity": 36, "l_extendedprice": 34850.16d, "l_discount": 0.09d, "l_tax": 0.06d, "l_returnflag": "N", "l_linestatus": "O", "l_shipdate": "1996-04-12", "l_commitdate": "1996-02-28", "l_receiptdate": "1996-04-20", "l_shipinstruct": "TAKE BACK RETURN", "l_shipmode": "MAIL", "l_comment": "ly final dependencies: slyly bold " }
+{ "l_orderkey": 1, "l_partkey": 64, "l_suppkey": 5, "l_linenumber": 3, "l_quantity": 8, "l_extendedprice": 7712.48d, "l_discount": 0.1d, "l_tax": 0.02d, "l_returnflag": "N", "l_linestatus": "O", "l_shipdate": "1996-01-29", "l_commitdate": "1996-03-05", "l_receiptdate": "1996-01-31", "l_shipinstruct": "TAKE BACK RETURN", "l_shipmode": "REG AIR", "l_comment": "riously. regular, express dep" }
+{ "l_orderkey": 1, "l_partkey": 3, "l_suppkey": 6, "l_linenumber": 4, "l_quantity": 28, "l_extendedprice": 25284.0d, "l_discount": 0.09d, "l_tax": 0.06d, "l_returnflag": "N", "l_linestatus": "O", "l_shipdate": "1996-04-21", "l_commitdate": "1996-03-30", "l_receiptdate": "1996-05-16", "l_shipinstruct": "NONE", "l_shipmode": "AIR", "l_comment": "lites. fluffily even de" }
+{ "l_orderkey": 1, "l_partkey": 25, "l_suppkey": 8, "l_linenumber": 5, "l_quantity": 24, "l_extendedprice": 22200.48d, "l_discount": 0.1d, "l_tax": 0.04d, "l_returnflag": "N", "l_linestatus": "O", "l_shipdate": "1996-03-30", "l_commitdate": "1996-03-14", "l_receiptdate": "1996-04-01", "l_shipinstruct": "NONE", "l_shipmode": "FOB", "l_comment": " pending foxes. slyly re" }
+{ "l_orderkey": 1, "l_partkey": 16, "l_suppkey": 3, "l_linenumber": 6, "l_quantity": 32, "l_extendedprice": 29312.32d, "l_discount": 0.07d, "l_tax": 0.02d, "l_returnflag": "N", "l_linestatus": "O", "l_shipdate": "1996-01-30", "l_commitdate": "1996-02-07", "l_receiptdate": "1996-02-03", "l_shipinstruct": "DELIVER IN PERSON", "l_shipmode": "MAIL", "l_comment": "arefully slyly ex" }
+{ "l_orderkey": 2, "l_partkey": 107, "l_suppkey": 2, "l_linenumber": 1, "l_quantity": 38, "l_extendedprice": 38269.8d, "l_discount": 0.0d, "l_tax": 0.05d, "l_returnflag": "N", "l_linestatus": "O", "l_shipdate": "1997-01-28", "l_commitdate": "1997-01-14", "l_receiptdate": "1997-02-02", "l_shipinstruct": "TAKE BACK RETURN", "l_shipmode": "RAIL", "l_comment": "ven requests. deposits breach a" }
+{ "l_orderkey": 3, "l_partkey": 5, "l_suppkey": 2, "l_linenumber": 1, "l_quantity": 45, "l_extendedprice": 40725.0d, "l_discount": 0.06d, "l_tax": 0.0d, "l_returnflag": "R", "l_linestatus": "F", "l_shipdate": "1994-02-02", "l_commitdate": "1994-01-04", "l_receiptdate": "1994-02-23", "l_shipinstruct": "NONE", "l_shipmode": "AIR", "l_comment": "ongside of the furiously brave acco" }
+{ "l_orderkey": 3, "l_partkey": 20, "l_suppkey": 10, "l_linenumber": 2, "l_quantity": 49, "l_extendedprice": 45080.98d, "l_discount": 0.1d, "l_tax": 0.0d, "l_returnflag": "R", "l_linestatus": "F", "l_shipdate": "1993-11-09", "l_commitdate": "1993-12-20", "l_receiptdate": "1993-11-24", "l_shipinstruct": "TAKE BACK RETURN", "l_shipmode": "RAIL", "l_comment": " unusual accounts. eve" }
+{ "l_orderkey": 3, "l_partkey": 129, "l_suppkey": 8, "l_linenumber": 3, "l_quantity": 27, "l_extendedprice": 27786.24d, "l_discount": 0.06d, "l_tax": 0.07d, "l_returnflag": "A", "l_linestatus": "F", "l_shipdate": "1994-01-16", "l_commitdate": "1993-11-22", "l_receiptdate": "1994-01-23", "l_shipinstruct": "DELIVER IN PERSON", "l_shipmode": "SHIP", "l_comment": "nal foxes wake. " }
+{ "l_orderkey": 3, "l_partkey": 30, "l_suppkey": 5, "l_linenumber": 4, "l_quantity": 2, "l_extendedprice": 1860.06d, "l_discount": 0.01d, "l_tax": 0.06d, "l_returnflag": "A", "l_linestatus": "F", "l_shipdate": "1993-12-04", "l_commitdate": "1994-01-07", "l_receiptdate": "1994-01-01", "l_shipinstruct": "NONE", "l_shipmode": "TRUCK", "l_comment": "y. fluffily pending d" }
+{ "l_orderkey": 3, "l_partkey": 184, "l_suppkey": 5, "l_linenumber": 5, "l_quantity": 28, "l_extendedprice": 30357.04d, "l_discount": 0.04d, "l_tax": 0.0d, "l_returnflag": "R", "l_linestatus": "F", "l_shipdate": "1993-12-14", "l_commitdate": "1994-01-10", "l_receiptdate": "1994-01-01", "l_shipinstruct": "TAKE BACK RETURN", "l_shipmode": "FOB", "l_comment": "ages nag slyly pending" }
+{ "l_orderkey": 3, "l_partkey": 63, "l_suppkey": 8, "l_linenumber": 6, "l_quantity": 26, "l_extendedprice": 25039.56d, "l_discount": 0.1d, "l_tax": 0.02d, "l_returnflag": "A", "l_linestatus": "F", "l_shipdate": "1993-10-29", "l_commitdate": "1993-12-18", "l_receiptdate": "1993-11-04", "l_shipinstruct": "TAKE BACK RETURN", "l_shipmode": "RAIL", "l_comment": "ges sleep after the caref" }
+{ "l_orderkey": 4, "l_partkey": 89, "l_suppkey": 10, "l_linenumber": 1, "l_quantity": 30, "l_extendedprice": 29672.4d, "l_discount": 0.03d, "l_tax": 0.08d, "l_returnflag": "N", "l_linestatus": "O", "l_shipdate": "1996-01-10", "l_commitdate": "1995-12-14", "l_receiptdate": "1996-01-18", "l_shipinstruct": "DELIVER IN PERSON", "l_shipmode": "REG AIR", "l_comment": "- quickly regular packages sleep. idly" }
+{ "l_orderkey": 5, "l_partkey": 109, "l_suppkey": 10, "l_linenumber": 1, "l_quantity": 15, "l_extendedprice": 15136.5d, "l_discount": 0.02d, "l_tax": 0.04d, "l_returnflag": "R", "l_linestatus": "F", "l_shipdate": "1994-10-31", "l_commitdate": "1994-08-31", "l_receiptdate": "1994-11-20", "l_shipinstruct": "NONE", "l_shipmode": "AIR", "l_comment": "ts wake furiously " }
+{ "l_orderkey": 5, "l_partkey": 124, "l_suppkey": 5, "l_linenumber": 2, "l_quantity": 26, "l_extendedprice": 26627.12d, "l_discount": 0.07d, "l_tax": 0.08d, "l_returnflag": "R", "l_linestatus": "F", "l_shipdate": "1994-10-16", "l_commitdate": "1994-09-25", "l_receiptdate": "1994-10-19", "l_shipinstruct": "NONE", "l_shipmode": "FOB", "l_comment": "sts use slyly quickly special instruc" }
+{ "l_orderkey": 5, "l_partkey": 38, "l_suppkey": 4, "l_linenumber": 3, "l_quantity": 50, "l_extendedprice": 46901.5d, "l_discount": 0.08d, "l_tax": 0.03d, "l_returnflag": "A", "l_linestatus": "F", "l_shipdate": "1994-08-08", "l_commitdate": "1994-10-13", "l_receiptdate": "1994-08-26", "l_shipinstruct": "DELIVER IN PERSON", "l_shipmode": "AIR", "l_comment": "eodolites. fluffily unusual" }
+{ "l_orderkey": 6, "l_partkey": 140, "l_suppkey": 6, "l_linenumber": 1, "l_quantity": 37, "l_extendedprice": 38485.18d, "l_discount": 0.08d, "l_tax": 0.03d, "l_returnflag": "A", "l_linestatus": "F", "l_shipdate": "1992-04-27", "l_commitdate": "1992-05-15", "l_receiptdate": "1992-05-02", "l_shipinstruct": "TAKE BACK RETURN", "l_shipmode": "TRUCK", "l_comment": "p furiously special foxes" }
+{ "l_orderkey": 7, "l_partkey": 183, "l_suppkey": 4, "l_linenumber": 1, "l_quantity": 12, "l_extendedprice": 12998.16d, "l_discount": 0.07d, "l_tax": 0.03d, "l_returnflag": "N", "l_linestatus": "O", "l_shipdate": "1996-05-07", "l_commitdate": "1996-03-13", "l_receiptdate": "1996-06-03", "l_shipinstruct": "TAKE BACK RETURN", "l_shipmode": "FOB", "l_comment": "ss pinto beans wake against th" }
+{ "l_orderkey": 7, "l_partkey": 146, "l_suppkey": 3, "l_linenumber": 2, "l_quantity": 9, "l_extendedprice": 9415.26d, "l_discount": 0.08d, "l_tax": 0.08d, "l_returnflag": "N", "l_linestatus": "O", "l_shipdate": "1996-02-01", "l_commitdate": "1996-03-02", "l_receiptdate": "1996-02-19", "l_shipinstruct": "TAKE BACK RETURN", "l_shipmode": "SHIP", "l_comment": "es. instructions" }
+{ "l_orderkey": 7, "l_partkey": 95, "l_suppkey": 8, "l_linenumber": 3, "l_quantity": 46, "l_extendedprice": 45774.14d, "l_discount": 0.1d, "l_tax": 0.07d, "l_returnflag": "N", "l_linestatus": "O", "l_shipdate": "1996-01-15", "l_commitdate": "1996-03-27", "l_receiptdate": "1996-02-03", "l_shipinstruct": "COLLECT COD", "l_shipmode": "MAIL", "l_comment": " unusual reques" }
+{ "l_orderkey": 7, "l_partkey": 164, "l_suppkey": 5, "l_linenumber": 4, "l_quantity": 28, "l_extendedprice": 29796.48d, "l_discount": 0.03d, "l_tax": 0.04d, "l_returnflag": "N", "l_linestatus": "O", "l_shipdate": "1996-03-21", "l_commitdate": "1996-04-08", "l_receiptdate": "1996-04-20", "l_shipinstruct": "NONE", "l_shipmode": "FOB", "l_comment": ". slyly special requests haggl" }
+{ "l_orderkey": 7, "l_partkey": 152, "l_suppkey": 4, "l_linenumber": 5, "l_quantity": 38, "l_extendedprice": 39981.7d, "l_discount": 0.08d, "l_tax": 0.01d, "l_returnflag": "N", "l_linestatus": "O", "l_shipdate": "1996-02-11", "l_commitdate": "1996-02-24", "l_receiptdate": "1996-02-18", "l_shipinstruct": "DELIVER IN PERSON", "l_shipmode": "TRUCK", "l_comment": "ns haggle carefully ironic deposits. bl" }
+{ "l_orderkey": 7, "l_partkey": 80, "l_suppkey": 10, "l_linenumber": 6, "l_quantity": 35, "l_extendedprice": 34302.8d, "l_discount": 0.06d, "l_tax": 0.03d, "l_returnflag": "N", "l_linestatus": "O", "l_shipdate": "1996-01-16", "l_commitdate": "1996-02-23", "l_receiptdate": "1996-01-22", "l_shipinstruct": "TAKE BACK RETURN", "l_shipmode": "FOB", "l_comment": "jole. excuses wake carefully alongside of " }
+{ "l_orderkey": 7, "l_partkey": 158, "l_suppkey": 3, "l_linenumber": 7, "l_quantity": 5, "l_extendedprice": 5290.75d, "l_discount": 0.04d, "l_tax": 0.02d, "l_returnflag": "N", "l_linestatus": "O", "l_shipdate": "1996-02-10", "l_commitdate": "1996-03-26", "l_receiptdate": "1996-02-13", "l_shipinstruct": "NONE", "l_shipmode": "FOB", "l_comment": "ithely regula" }
diff --git a/asterix-app/src/test/resources/runtimets/results/dml/insert-syntax.adm b/asterix-app/src/test/resources/runtimets/results/dml/insert-syntax.adm
new file mode 100644
index 0000000..9407868
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/results/dml/insert-syntax.adm
@@ -0,0 +1,4 @@
+{ "id": 1, "name": "Person One", "hobbies": {{ "Rock", "Metal" }} }
+{ "id": 2, "name": "Person Two", "hobbies": {{ "Rock", "Jazz" }} }
+{ "id": 3, "name": "Person Three", "hobbies": {{ "Blues" }} }
+{ "id": 4, "name": "Person Four", "hobbies": {{ "Metal", "Jazz" }} }
diff --git a/asterix-app/src/test/resources/runtimets/results/scan/alltypes_02.adm b/asterix-app/src/test/resources/runtimets/results/scan/alltypes_02.adm
new file mode 100644
index 0000000..64aee7c
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/results/scan/alltypes_02.adm
@@ -0,0 +1 @@
+{ "id": 10, "name": "Nancy", "age": 32.5f, "salary": 12.0d, "married": true, "interests": {{ "reading", "writing" }}, "children": [ "Brad", "Scott" ], "address": { "number": 8389, "street": "Hill St.", "city": "Mountain View" }, "dob": date("-2011-01-27"), "time": time("12:20:30.000Z"), "datetime": datetime("-1951-12-27T12:20:30.000Z"), "duration": duration("P10Y11M12DT10H50M30S"), "location2d": point("41.0,44.0"), "location3d": point3d("44.0,13.0,41.0"), "line": line("10.1,11.1 10.2,11.2"), "polygon": polygon("1.2,1.3 2.1,2.5 3.5,3.6 4.6,4.8"), "circle": circle("10.1,11.1 10.2") }
diff --git a/asterix-app/src/test/resources/runtimets/results/temp/calendar_duration/calendar_duration.1.adm b/asterix-app/src/test/resources/runtimets/results/temp/calendar_duration/calendar_duration.1.adm
deleted file mode 100644
index eb7d565..0000000
--- a/asterix-app/src/test/resources/runtimets/results/temp/calendar_duration/calendar_duration.1.adm
+++ /dev/null
@@ -1 +0,0 @@
-{ "cduration1": duration("P20Y3M13DT7H48M21.329S"), "cduration2": duration("-P9M6DT4H45M39.328S"), "cduration3": duration("P8Y6M"), "cduration4": duration("-P21Y7M10DT13H9M42.983S"), "cduration5": duration("P20Y3M12DT7H48M21.329S"), "cduration6": duration("-P9M5DT4H45M39.328S"), "cduration7": duration("P8Y6M"), "cduration8": duration("-P21Y7M10DT13H9M42.983S") }
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/results/temp/insert_from_ext_ds/insert_from_ext_ds.1.adm b/asterix-app/src/test/resources/runtimets/results/temp/insert_from_ext_ds/insert_from_ext_ds.1.adm
deleted file mode 100644
index afe2ccc..0000000
--- a/asterix-app/src/test/resources/runtimets/results/temp/insert_from_ext_ds/insert_from_ext_ds.1.adm
+++ /dev/null
@@ -1,3 +0,0 @@
-{ "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")") }
-{ "date": null, "time": null, "datetime": datetime("1920-12-20T23:29:18.478Z"), "duration": null, "interval": null }
-{ "date": null, "time": null, "datetime": null, "duration": null, "interval": null }
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/results/temp/accessors/accessors.1.adm b/asterix-app/src/test/resources/runtimets/results/temporal/accessors.adm
similarity index 100%
rename from asterix-app/src/test/resources/runtimets/results/temp/accessors/accessors.1.adm
rename to asterix-app/src/test/resources/runtimets/results/temporal/accessors.adm
diff --git a/asterix-app/src/test/resources/runtimets/results/temp/adjust_timezone/adjust_timezone.1.adm b/asterix-app/src/test/resources/runtimets/results/temporal/adjust_timezone.adm
similarity index 100%
rename from asterix-app/src/test/resources/runtimets/results/temp/adjust_timezone/adjust_timezone.1.adm
rename to asterix-app/src/test/resources/runtimets/results/temporal/adjust_timezone.adm
diff --git a/asterix-app/src/test/resources/runtimets/results/temporal/calendar_duration.adm b/asterix-app/src/test/resources/runtimets/results/temporal/calendar_duration.adm
new file mode 100644
index 0000000..957388f
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/results/temporal/calendar_duration.adm
@@ -0,0 +1 @@
+{ "cduration1": duration("P20Y3M12DT7H48M21.329S"), "c1": true, "cduration2": duration("-P9M6DT4H45M39.328S"), "c2": true, "cduration3": duration("P8Y6M"), "c3": true, "cduration4": duration("-P21Y7M10DT13H9M42.983S"), "c4": true, "cduration5": duration("P20Y3M12DT7H48M21.329S"), "c5": true, "cduration6": duration("-P9M5DT4H45M39.328S"), "c6": true, "cduration7": duration("P8Y6M"), "c7": true, "cduration8": duration("-P21Y7M10DT13H9M42.983S"), "c8": true }
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/results/temp/date_functions/date_functions.1.adm b/asterix-app/src/test/resources/runtimets/results/temporal/date_functions.adm
similarity index 79%
rename from asterix-app/src/test/resources/runtimets/results/temp/date_functions/date_functions.1.adm
rename to asterix-app/src/test/resources/runtimets/results/temporal/date_functions.adm
index 2276f85..a5285d8 100644
--- a/asterix-app/src/test/resources/runtimets/results/temp/date_functions/date_functions.1.adm
+++ b/asterix-app/src/test/resources/runtimets/results/temporal/date_functions.adm
@@ -1 +1 @@
-{ "date1": date("2012-09-17"), "date2": date("1327-12-02"), "date3": date("2012-10-10"), "date4": date("2010-05-17"), "date5": date("1703-08-09"), "duration1": duration("P137216D"), "duration2": duration("-P854D") }
\ No newline at end of file
+{ "date1": date("2012-09-17"), "date2": date("1327-12-02"), "date3": date("2012-10-10"), "date4": date("2010-05-17"), "date5": date("1703-08-09"), "duration1": duration("P137216D"), "duration2": duration("-P854D"), "c1": true, "c2": true }
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/results/temp/datetime_functions/datetime_functions.1.adm b/asterix-app/src/test/resources/runtimets/results/temporal/datetime_functions.adm
similarity index 88%
rename from asterix-app/src/test/resources/runtimets/results/temp/datetime_functions/datetime_functions.1.adm
rename to asterix-app/src/test/resources/runtimets/results/temporal/datetime_functions.adm
index 6ebc562..01f3758 100644
--- a/asterix-app/src/test/resources/runtimets/results/temp/datetime_functions/datetime_functions.1.adm
+++ b/asterix-app/src/test/resources/runtimets/results/temporal/datetime_functions.adm
@@ -1 +1 @@
-{ "datetime1": datetime("1970-01-12T01:33:27.429Z"), "datetime2": datetime("1327-12-02T23:35:49.938Z"), "datetime3": datetime("1327-12-02T23:35:49.938Z"), "duration1": duration("-P234526DT1H57M37.491S") }
\ No newline at end of file
+{ "datetime1": datetime("1970-01-12T01:33:27.429Z"), "datetime2": datetime("1327-12-02T23:35:49.938Z"), "datetime3": datetime("1327-12-02T23:35:49.938Z"), "duration1": duration("-P234526DT1H57M37.491S"), "c1": true }
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/results/temp/insert_from_delimited_ds/insert_from_delimited_ds.1.adm b/asterix-app/src/test/resources/runtimets/results/temporal/insert_from_delimited_ds.adm
similarity index 100%
rename from asterix-app/src/test/resources/runtimets/results/temp/insert_from_delimited_ds/insert_from_delimited_ds.1.adm
rename to asterix-app/src/test/resources/runtimets/results/temporal/insert_from_delimited_ds.adm
diff --git a/asterix-app/src/test/resources/runtimets/results/temporal/insert_from_ext_ds.adm b/asterix-app/src/test/resources/runtimets/results/temporal/insert_from_ext_ds.adm
new file mode 100644
index 0000000..b087496
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/results/temporal/insert_from_ext_ds.adm
@@ -0,0 +1,3 @@
+{ "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") }
+{ "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") }
+{ "date": null, "time": null, "datetime": datetime("-0290-03-22T17:59:48.999Z"), "duration": duration("-P27Y148D"), "interval": interval-date("-2012-03-17, 2013-04-01") }
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/results/temp/interval_functions/interval_functions.1.adm b/asterix-app/src/test/resources/runtimets/results/temporal/interval_functions.adm
similarity index 100%
rename from asterix-app/src/test/resources/runtimets/results/temp/interval_functions/interval_functions.1.adm
rename to asterix-app/src/test/resources/runtimets/results/temporal/interval_functions.adm
diff --git a/asterix-app/src/test/resources/runtimets/results/temp/time_functions/time_functions.1.adm b/asterix-app/src/test/resources/runtimets/results/temporal/time_functions.adm
similarity index 75%
rename from asterix-app/src/test/resources/runtimets/results/temp/time_functions/time_functions.1.adm
rename to asterix-app/src/test/resources/runtimets/results/temporal/time_functions.adm
index 56531bd..791d652 100644
--- a/asterix-app/src/test/resources/runtimets/results/temp/time_functions/time_functions.1.adm
+++ b/asterix-app/src/test/resources/runtimets/results/temporal/time_functions.adm
@@ -1 +1 @@
-{ "time1": time("00:26:00.074Z"), "time2": time("23:35:49.938Z"), "time3": time("23:30:23.000Z"), "time4": time("18:26:00.074Z"), "time5": time("00:11:49.938Z"), "duration1": duration("-PT23H24M"), "duration2": duration("PT18H") }
\ No newline at end of file
+{ "time1": time("00:26:00.074Z"), "time2": time("23:35:49.938Z"), "time3": time("23:30:23.000Z"), "time4": time("18:26:00.074Z"), "time5": time("00:11:49.938Z"), "duration1": duration("-PT23H24M"), "duration2": duration("PT18H"), "c1": true, "c2": true }
\ No newline at end of file
diff --git a/asterix-aql/src/main/javacc/AQL.jj b/asterix-aql/src/main/javacc/AQL.jj
index e296266..dca639b 100644
--- a/asterix-aql/src/main/javacc/AQL.jj
+++ b/asterix-aql/src/main/javacc/AQL.jj
@@ -260,7 +260,7 @@
     datasetName = nameComponents.second;
    }
     
-    <LEFTPAREN> query = Query() <RIGHTPAREN> ";"
+    (<LEFTPAREN>)? query = Query() (<RIGHTPAREN>)? (";")?
    {return new InsertStatement(dataverseName, datasetName, query,  getVarCounter());}
 }
 
@@ -280,7 +280,7 @@
    { 
 	  nameComponents  = getDotSeparatedPair();
    }
-   ("where" condition = Expression())?  (dieClause = DieClause())? ";"
+   ("where" condition = Expression())?  (dieClause = DieClause())? (";")?
    {return new DeleteStatement(var, nameComponents.first, nameComponents.second, condition,  dieClause, getVarCounter()); }
 }
 
@@ -1818,10 +1818,11 @@
   Expression expr = null;
 }
 {
-  //Literal | VariableRef | ListConstructor | RecordConstructor | FunctionCallExpr | ParenthesizedExpression
+  //Literal | VariableRef | ListConstructor | RecordConstructor | FunctionCallExpr | DatasetAccessExpression | ParenthesizedExpression
 	(
 	  expr =Literal() 
 	   | expr = FunctionCallExpr()
+	   | expr = DatasetAccessExpression()
 	   | expr =VariableRef() 
 	   
     {
@@ -2046,7 +2047,8 @@
   String id2=null;
 }
 {  
-    ( <IDENTIFIER> { dataverse = defaultDataverse; funcName = token.image;} ("." <IDENTIFIER> { dataverse = funcName; funcName = token.image;})? | <DATASET> {dataverse = MetadataConstants.METADATA_DATAVERSE_NAME; funcName = getToken(0).toString();})
+    
+    <IDENTIFIER> { dataverse = defaultDataverse; funcName = token.image;} ("." <IDENTIFIER> { dataverse = funcName; funcName = token.image;})?
     {
        hint = getHint(token);
     }
@@ -2070,7 +2072,34 @@
      }
 }
 
-
+Expression DatasetAccessExpression() throws ParseException:
+{
+  CallExpr callExpr;
+  List<Expression> argList = new ArrayList<Expression>();
+  String funcName;
+  String dataverse;
+  LiteralExpr ds;
+  LiteralExpr dvds;
+  Expression nameArg;
+  int arity = 0;
+}
+{  
+    <DATASET> {dataverse = MetadataConstants.METADATA_DATAVERSE_NAME; funcName = getToken(0).toString();}
+    (
+    (<IDENTIFIER> {ds = new LiteralExpr(); ds.setValue( new StringLiteral(token.image) ); argList.add(ds); arity ++;} ("." <IDENTIFIER> { dvds = new LiteralExpr(); dvds.setValue(new StringLiteral(ds.getValue()+"."+token.image)); argList.remove(0); argList.add(dvds);})? ) |  
+    (<LEFTPAREN> nameArg = Expression() {argList.add(nameArg); arity ++;} ("," nameArg = Expression() { argList.add(nameArg); arity++; })* <RIGHTPAREN>)
+    )  
+     
+     {
+       FunctionSignature signature = lookupFunctionSignature(dataverse, funcName.toString(), arity);
+       if(signature == null)
+             {
+                signature = new FunctionSignature(dataverse, funcName.toString(), arity);
+             }
+       callExpr = new CallExpr(signature,argList);
+       return callExpr;
+     }
+}
 
 Expression ParenthesizedExpression() throws ParseException:
 {
diff --git a/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ADatePrinter.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ADatePrinter.java
index 918e286..327faf1 100644
--- a/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ADatePrinter.java
+++ b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ADatePrinter.java
@@ -30,4 +30,14 @@
                 .append("-").append(String.format("%02d", gCalInstance.getDayOfMonthYear(chrononTime, year, month)));
         ps.print("\")");
     }
+
+    public void printString(byte[] b, int s, int l, PrintStream ps) throws AlgebricksException {
+        long chrononTime = AInt32SerializerDeserializer.getInt(b, s + 1) * CHRONON_OF_DAY;
+
+        int year = gCalInstance.getYear(chrononTime);
+        int month = gCalInstance.getMonthOfYear(chrononTime, year);
+
+        ps.append(String.format(year < 0 ? "%05d" : "%04d", year)).append("-").append(String.format("%02d", month))
+                .append("-").append(String.format("%02d", gCalInstance.getDayOfMonthYear(chrononTime, year, month)));
+    }
 }
\ No newline at end of file
diff --git a/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ADateTimePrinter.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ADateTimePrinter.java
index 96df767..7cf1478 100644
--- a/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ADateTimePrinter.java
+++ b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ADateTimePrinter.java
@@ -33,4 +33,18 @@
                 .append(String.format("%03d", gCalInstance.getMillisOfSec(chrononTime))).append("Z");
         ps.print("\")");
     }
+
+    public void printString(byte[] b, int s, int l, PrintStream ps) throws AlgebricksException {
+        long chrononTime = AInt64SerializerDeserializer.getLong(b, s + 1);
+
+        int year = gCalInstance.getYear(chrononTime);
+        int month = gCalInstance.getMonthOfYear(chrononTime, year);
+
+        ps.append(String.format(year < 0 ? "%05d" : "%04d", year)).append("-").append(String.format("%02d", month))
+                .append("-").append(String.format("%02d", gCalInstance.getDayOfMonthYear(chrononTime, year, month)))
+                .append("T").append(String.format("%02d", gCalInstance.getHourOfDay(chrononTime))).append(":")
+                .append(String.format("%02d", gCalInstance.getMinOfHour(chrononTime))).append(":")
+                .append(String.format("%02d", gCalInstance.getSecOfMin(chrononTime))).append(".")
+                .append(String.format("%03d", gCalInstance.getMillisOfSec(chrononTime))).append("Z");
+    }
 }
\ No newline at end of file
diff --git a/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AIntervalPrinter.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AIntervalPrinter.java
index 99c40b2..b96feff 100644
--- a/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AIntervalPrinter.java
+++ b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AIntervalPrinter.java
@@ -23,8 +23,6 @@
 
 public class AIntervalPrinter implements IPrinter {
 
-    private static final long serialVersionUID = 1L;
-
     public static final AIntervalPrinter INSTANCE = new AIntervalPrinter();
 
     /* (non-Javadoc)
@@ -39,32 +37,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);
 
         IPrinter timeInstancePrinter;
 
         if (typetag == ATypeTag.DATE.serialize()) {
+            ps.print("-date(\"");
             timeInstancePrinter = ADatePrinter.INSTANCE;
+            ((ADatePrinter)timeInstancePrinter).printString(b, s + 4, 4, ps);
+            ps.print(", ");
+            ((ADatePrinter)timeInstancePrinter).printString(b, s + 12, 4, ps);
         } else if (typetag == ATypeTag.TIME.serialize()) {
+            ps.print("-time(\"");
             timeInstancePrinter = ATimePrinter.INSTANCE;
+            ((ATimePrinter)timeInstancePrinter).printString(b, s + 4, 4, ps);
+            ps.print(", ");
+            ((ATimePrinter)timeInstancePrinter).printString(b, s + 12, 4, ps);
         } else if (typetag == ATypeTag.DATETIME.serialize()) {
+            ps.print("-datetime(\"");
             timeInstancePrinter = ADateTimePrinter.INSTANCE;
+            ((ADateTimePrinter)timeInstancePrinter).printString(b, s, 8, ps);
+            ps.print(", ");
+            ((ADateTimePrinter)timeInstancePrinter).printString(b, s + 8, 8, ps);
         } else {
             throw new AlgebricksException("Unsupport internal time types in interval: " + typetag);
         }
 
-        if (typetag == ATypeTag.TIME.serialize() || typetag == ATypeTag.DATE.serialize()) {
-            timeInstancePrinter.print(b, s + 1 + 4 - 1, 8, ps);
-            ps.print(", ");
-            timeInstancePrinter.print(b, s + 1 + 8 + 4 - 1, 8, ps);
-        } else {
-            timeInstancePrinter.print(b, s, 8, ps);
-            ps.print(", ");
-            timeInstancePrinter.print(b, s + 1 + 8 - 1, 8, ps);
-        }
-
         ps.print("\")");
     }
 }
diff --git a/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ATimePrinter.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ATimePrinter.java
index b77ee64..aba6a4b 100644
--- a/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ATimePrinter.java
+++ b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ATimePrinter.java
@@ -29,5 +29,14 @@
 
         ps.print("\")");
     }
+    
+    public void printString(byte[] b, int s, int l, PrintStream ps) throws AlgebricksException {
+        int time = AInt32SerializerDeserializer.getInt(b, s + 1);
+
+        ps.append(String.format("%02d", gCalInstance.getHourOfDay(time))).append(":")
+                .append(String.format("%02d", gCalInstance.getMinOfHour(time))).append(":")
+                .append(String.format("%02d", gCalInstance.getSecOfMin(time))).append(".")
+                .append(String.format("%03d", gCalInstance.getMillisOfSec(time))).append("Z");
+    }
 
 }
\ No newline at end of file
diff --git a/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/ADateSerializerDeserializer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/ADateSerializerDeserializer.java
index 86a9a8d..5f68522 100644
--- a/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/ADateSerializerDeserializer.java
+++ b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/ADateSerializerDeserializer.java
@@ -23,7 +23,6 @@
 import edu.uci.ics.asterix.om.base.AMutableDate;
 import edu.uci.ics.asterix.om.base.temporal.ADateParserFactory;
 import edu.uci.ics.asterix.om.base.temporal.GregorianCalendarSystem;
-import edu.uci.ics.asterix.om.base.temporal.StringCharSequenceAccessor;
 import edu.uci.ics.asterix.om.types.BuiltinType;
 import edu.uci.ics.hyracks.api.dataflow.value.ISerializerDeserializer;
 import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
@@ -63,9 +62,7 @@
 
         long chrononTimeInMs = 0;
         try {
-            StringCharSequenceAccessor charAccessor = new StringCharSequenceAccessor();
-            charAccessor.reset(date, 0, date.length());
-            chrononTimeInMs = ADateParserFactory.parseDatePart(charAccessor, true);
+            chrononTimeInMs = ADateParserFactory.parseDatePart(date, 0, date.length());
         } catch (Exception e) {
             throw new HyracksDataException(e);
         }
diff --git a/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/ADateTimeSerializerDeserializer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/ADateTimeSerializerDeserializer.java
index cedfc8d..34c3a5b 100644
--- a/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/ADateTimeSerializerDeserializer.java
+++ b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/ADateTimeSerializerDeserializer.java
@@ -23,7 +23,6 @@
 import edu.uci.ics.asterix.om.base.AMutableDateTime;
 import edu.uci.ics.asterix.om.base.temporal.ADateParserFactory;
 import edu.uci.ics.asterix.om.base.temporal.ATimeParserFactory;
-import edu.uci.ics.asterix.om.base.temporal.StringCharSequenceAccessor;
 import edu.uci.ics.asterix.om.types.BuiltinType;
 import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
 import edu.uci.ics.hyracks.api.dataflow.value.ISerializerDeserializer;
@@ -37,7 +36,7 @@
     @SuppressWarnings("unchecked")
     private static final ISerializerDeserializer<ADateTime> datetimeSerde = AqlSerializerDeserializerProvider.INSTANCE
             .getSerializerDeserializer(BuiltinType.ADATETIME);
-
+    private static final AMutableDateTime aDateTime = new AMutableDateTime(0L);
     private static final String errorMessage = "This can not be an instance of datetime";
 
     private ADateTimeSerializerDeserializer() {
@@ -62,28 +61,25 @@
     }
 
     public static void parse(String datetime, DataOutput out) throws HyracksDataException {
-        AMutableDateTime aDateTime = new AMutableDateTime(0L);
 
         long chrononTimeInMs = 0;
         try {
-            StringCharSequenceAccessor charAccessor = new StringCharSequenceAccessor();
-            charAccessor.reset(datetime, 0, datetime.length());
 
             // +1 if it is negative (-)
-            short timeOffset = (short) ((charAccessor.getCharAt(0) == '-') ? 1 : 0);
+            short timeOffset = (short) ((datetime.charAt(0) == '-') ? 1 : 0);
 
-            if (charAccessor.getCharAt(timeOffset + 10) != 'T' && charAccessor.getCharAt(timeOffset + 8) != 'T') {
-                throw new AlgebricksException(errorMessage + ": missing T");
+            timeOffset += 8;
+            
+            if(datetime.charAt(timeOffset) != 'T'){
+                timeOffset += 2;
+                if(datetime.charAt(timeOffset) != 'T'){
+                    throw new AlgebricksException(errorMessage + ": missing T");
+                }
             }
 
-            // if extended form 11, else 9
-            timeOffset += (charAccessor.getCharAt(timeOffset + 13) == ':') ? (short) (11) : (short) (9);
+            chrononTimeInMs = ADateParserFactory.parseDatePart(datetime, 0, timeOffset);
 
-            chrononTimeInMs = ADateParserFactory.parseDatePart(charAccessor, false);
-
-            charAccessor.reset(datetime, timeOffset, datetime.length() - timeOffset);
-
-            chrononTimeInMs += ATimeParserFactory.parseTimePart(charAccessor);
+            chrononTimeInMs += ATimeParserFactory.parseTimePart(datetime, timeOffset + 1, datetime.length() - timeOffset - 1);
         } catch (Exception e) {
             throw new HyracksDataException(e);
         }
diff --git a/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/ADurationSerializerDeserializer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/ADurationSerializerDeserializer.java
index 88e2ea5..6930f60 100644
--- a/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/ADurationSerializerDeserializer.java
+++ b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/ADurationSerializerDeserializer.java
@@ -8,7 +8,6 @@
 import edu.uci.ics.asterix.om.base.ADuration;
 import edu.uci.ics.asterix.om.base.AMutableDuration;
 import edu.uci.ics.asterix.om.base.temporal.ADurationParserFactory;
-import edu.uci.ics.asterix.om.base.temporal.StringCharSequenceAccessor;
 import edu.uci.ics.asterix.om.types.BuiltinType;
 import edu.uci.ics.hyracks.api.dataflow.value.ISerializerDeserializer;
 import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
@@ -21,6 +20,7 @@
     @SuppressWarnings("unchecked")
     private static final ISerializerDeserializer<ADuration> durationSerde = AqlSerializerDeserializerProvider.INSTANCE
             .getSerializerDeserializer(BuiltinType.ADURATION);
+    private static final AMutableDuration aDuration = new AMutableDuration(0, 0);
 
     private ADurationSerializerDeserializer() {
     }
@@ -46,11 +46,7 @@
 
     public static void parse(String duration, DataOutput out) throws HyracksDataException {
         try {
-            AMutableDuration aDuration = new AMutableDuration(0, 0);
-            StringCharSequenceAccessor charAccessor = new StringCharSequenceAccessor();
-            charAccessor.reset(duration, 0, duration.length());
-            ADurationParserFactory.parseDuration(charAccessor, aDuration);
-
+            ADurationParserFactory.parseDuration(duration, 0, duration.length(), aDuration);
             durationSerde.serialize(aDuration, out);
         } catch (Exception e) {
             throw new HyracksDataException(e);
diff --git a/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/AIntervalSerializerDeserializer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/AIntervalSerializerDeserializer.java
index 7c87dfa..8c4def0 100644
--- a/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/AIntervalSerializerDeserializer.java
+++ b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/AIntervalSerializerDeserializer.java
@@ -24,7 +24,6 @@
 import edu.uci.ics.asterix.om.base.temporal.ADateParserFactory;
 import edu.uci.ics.asterix.om.base.temporal.ATimeParserFactory;
 import edu.uci.ics.asterix.om.base.temporal.GregorianCalendarSystem;
-import edu.uci.ics.asterix.om.base.temporal.StringCharSequenceAccessor;
 import edu.uci.ics.asterix.om.types.ATypeTag;
 import edu.uci.ics.asterix.om.types.BuiltinType;
 import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
@@ -39,7 +38,7 @@
     @SuppressWarnings("unchecked")
     private static final ISerializerDeserializer<AInterval> intervalSerde = AqlSerializerDeserializerProvider.INSTANCE
             .getSerializerDeserializer(BuiltinType.AINTERVAL);
-
+    private static final AMutableInterval aInterval = new AMutableInterval(0L, 0L, (byte) 0);
     private static final String errorMessage = "This can not be an instance of interval";
 
     private AIntervalSerializerDeserializer() {
@@ -64,7 +63,6 @@
         } catch (IOException e) {
             throw new HyracksDataException(e);
         }
-
     }
 
     public static long getIntervalStart(byte[] data, int offset) {
@@ -87,68 +85,46 @@
      * @throws HyracksDataException
      */
     public static void parseDatetime(String interval, DataOutput out) throws HyracksDataException {
-        AMutableInterval aInterval = new AMutableInterval(0l, 0l, (byte) 0);
 
         long chrononTimeInMsStart = 0;
         long chrononTimeInMsEnd = 0;
         try {
 
-            StringCharSequenceAccessor charAccessor = new StringCharSequenceAccessor();
+            // 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 < 0) {
+            if (commaIndex < 1) {
                 throw new AlgebricksException("comma is missing for a string of interval");
             }
 
-            int nonSpaceIndex = commaIndex - 1;
-            while (interval.charAt(nonSpaceIndex) == ' ') {
-                nonSpaceIndex--;
+            endOffset = commaIndex - 1;
+
+            timeSeperatorOffsetInDatetimeString = interval.indexOf('T');
+
+            if (timeSeperatorOffsetInDatetimeString < 0) {
+                throw new AlgebricksException(errorMessage + ": missing T for a datetime value.");
             }
 
-            // Interval Start
-            charAccessor.reset(interval, 0, nonSpaceIndex + 1);
+            chrononTimeInMsStart = parseDatePart(interval, startOffset, timeSeperatorOffsetInDatetimeString - 1);
 
-            // +1 if it is negative (-)
-            short timeOffset = (short) ((charAccessor.getCharAt(0) == '-') ? 1 : 0);
-
-            if (charAccessor.getCharAt(timeOffset + 10) != 'T' && charAccessor.getCharAt(timeOffset + 8) != 'T') {
-                throw new AlgebricksException(errorMessage + ": missing T");
-            }
-
-            // if extended form 11, else 9
-            timeOffset += (charAccessor.getCharAt(timeOffset + 13) == ':') ? (short) (11) : (short) (9);
-
-            chrononTimeInMsStart = ADateParserFactory.parseDatePart(charAccessor, false);
-
-            charAccessor.reset(interval, timeOffset, nonSpaceIndex - timeOffset + 1);
-
-            chrononTimeInMsStart += ATimeParserFactory.parseTimePart(charAccessor);
+            chrononTimeInMsStart += parseTimePart(interval, timeSeperatorOffsetInDatetimeString + 1, endOffset);
 
             // Interval End
-            nonSpaceIndex = commaIndex + 1;
-            while (interval.charAt(nonSpaceIndex) == ' ') {
-                nonSpaceIndex++;
+            startOffset = commaIndex + 1;
+            endOffset = interval.length() - 1;
+
+            timeSeperatorOffsetInDatetimeString = interval.indexOf('T', startOffset);
+
+            if (timeSeperatorOffsetInDatetimeString < 0) {
+                throw new AlgebricksException(errorMessage + ": missing T for a datetime value.");
             }
 
-            charAccessor.reset(interval, nonSpaceIndex, interval.length() - nonSpaceIndex);
+            chrononTimeInMsEnd = parseDatePart(interval, startOffset, timeSeperatorOffsetInDatetimeString - 1);
 
-            // +1 if it is negative (-)
-            timeOffset = (short) ((charAccessor.getCharAt(0) == '-') ? 1 : 0);
-
-            if (charAccessor.getCharAt(timeOffset + 10) != 'T' && charAccessor.getCharAt(timeOffset + 8) != 'T') {
-                throw new AlgebricksException(errorMessage + ": missing T");
-            }
-
-            // if extended form 11, else 9
-            timeOffset += (charAccessor.getCharAt(timeOffset + 13) == ':') ? (short) (11) : (short) (9);
-
-            chrononTimeInMsEnd = ADateParserFactory.parseDatePart(charAccessor, false);
-
-            charAccessor.reset(interval, nonSpaceIndex + timeOffset, interval.length() - nonSpaceIndex - timeOffset);
-
-            chrononTimeInMsEnd += ATimeParserFactory.parseTimePart(charAccessor);
-
+            chrononTimeInMsEnd += parseTimePart(interval, timeSeperatorOffsetInDatetimeString + 1, endOffset);
         } catch (Exception e) {
             throw new HyracksDataException(e);
         }
@@ -159,13 +135,13 @@
     }
 
     public static void parseTime(String interval, DataOutput out) throws HyracksDataException {
-        AMutableInterval aInterval = new AMutableInterval(0l, 0l, (byte) 0);
 
         long chrononTimeInMsStart = 0;
         long chrononTimeInMsEnd = 0;
         try {
 
-            StringCharSequenceAccessor charAccessor = new StringCharSequenceAccessor();
+            int startOffset = 0;
+            int endOffset;
 
             // Get the index for the comma
             int commaIndex = interval.indexOf(',');
@@ -173,27 +149,20 @@
                 throw new AlgebricksException("comma is missing for a string of interval");
             }
 
-            int nonSpaceIndex = commaIndex - 1;
-            while (interval.charAt(nonSpaceIndex) == ' ') {
-                nonSpaceIndex--;
-            }
+            endOffset = commaIndex - 1;
 
             // Interval Start
-            charAccessor.reset(interval, 0, nonSpaceIndex + 1);
-            chrononTimeInMsStart = ATimeParserFactory.parseTimePart(charAccessor);
+            chrononTimeInMsStart = parseTimePart(interval, startOffset, endOffset);
 
             if (chrononTimeInMsStart < 0) {
                 chrononTimeInMsStart += GregorianCalendarSystem.CHRONON_OF_DAY;
             }
 
             // Interval End
-            nonSpaceIndex = commaIndex + 1;
-            while (interval.charAt(nonSpaceIndex) == ' ') {
-                nonSpaceIndex++;
-            }
+            startOffset = commaIndex + 1;
+            endOffset = interval.length() - 1;
 
-            charAccessor.reset(interval, nonSpaceIndex, interval.length() - nonSpaceIndex);
-            chrononTimeInMsEnd = ATimeParserFactory.parseTimePart(charAccessor);
+            chrononTimeInMsEnd = parseTimePart(interval, startOffset, endOffset);
 
             if (chrononTimeInMsEnd < 0) {
                 chrononTimeInMsEnd += GregorianCalendarSystem.CHRONON_OF_DAY;
@@ -208,57 +177,67 @@
     }
 
     public static void parseDate(String interval, DataOutput out) throws HyracksDataException {
-        AMutableInterval aInterval = new AMutableInterval(0l, 0l, (byte) 0);
 
         long chrononTimeInMsStart = 0;
         long chrononTimeInMsEnd = 0;
-        short tempStart = 0;
-        short tempEnd = 0;
         try {
-            StringCharSequenceAccessor charAccessor = new StringCharSequenceAccessor();
+
+            // 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 < 0) {
+            if (commaIndex < 1) {
                 throw new AlgebricksException("comma is missing for a string of interval");
             }
 
-            int nonSpaceIndex = commaIndex - 1;
-            while (interval.charAt(nonSpaceIndex) == ' ') {
-                nonSpaceIndex--;
-            }
+            endOffset = commaIndex - 1;
 
-            // Interval Start
-            charAccessor.reset(interval, 0, nonSpaceIndex + 1);
-
-            chrononTimeInMsStart = ADateParserFactory.parseDatePart(charAccessor, true);
-
-            if (chrononTimeInMsStart < 0 && chrononTimeInMsStart % GregorianCalendarSystem.CHRONON_OF_DAY != 0) {
-                tempStart = 1;
-            }
+            chrononTimeInMsStart = parseDatePart(interval, startOffset, endOffset);
 
             // Interval End
-            nonSpaceIndex = commaIndex + 1;
-            while (interval.charAt(nonSpaceIndex) == ' ') {
-                nonSpaceIndex++;
-            }
+            startOffset = commaIndex + 1;
+            endOffset = interval.length() - 1;
 
-            charAccessor.reset(interval, nonSpaceIndex, interval.length() - nonSpaceIndex);
-
-            chrononTimeInMsEnd = ADateParserFactory.parseDatePart(charAccessor, true);
-
-            if (chrononTimeInMsEnd < 0 && chrononTimeInMsEnd % GregorianCalendarSystem.CHRONON_OF_DAY != 0) {
-                tempEnd = 1;
-            }
+            chrononTimeInMsEnd = parseDatePart(interval, startOffset, endOffset);
 
         } catch (Exception e) {
             throw new HyracksDataException(e);
         }
 
-        aInterval.setValue((chrononTimeInMsStart / GregorianCalendarSystem.CHRONON_OF_DAY) - tempStart,
-                (chrononTimeInMsEnd / GregorianCalendarSystem.CHRONON_OF_DAY) - tempEnd, ATypeTag.DATE.serialize());
+        aInterval.setValue((chrononTimeInMsStart / GregorianCalendarSystem.CHRONON_OF_DAY),
+                (chrononTimeInMsEnd / GregorianCalendarSystem.CHRONON_OF_DAY), ATypeTag.DATE.serialize());
 
         intervalSerde.serialize(aInterval, out);
     }
 
+    private static long parseDatePart(String interval, int startOffset, int endOffset) throws AlgebricksException,
+            HyracksDataException {
+
+        while (interval.charAt(endOffset) == '"' || interval.charAt(endOffset) == ' ') {
+            endOffset--;
+        }
+
+        while (interval.charAt(startOffset) == '"' || interval.charAt(startOffset) == ' ') {
+            startOffset++;
+        }
+
+        return ADateParserFactory.parseDatePart(interval, startOffset, endOffset - startOffset + 1);
+    }
+
+    private static int parseTimePart(String interval, int startOffset, int endOffset) throws AlgebricksException,
+            HyracksDataException {
+
+        while (interval.charAt(endOffset) == '"' || interval.charAt(endOffset) == ' ') {
+            endOffset--;
+        }
+
+        while (interval.charAt(startOffset) == '"' || interval.charAt(startOffset) == ' ') {
+            startOffset++;
+        }
+
+        return ATimeParserFactory.parseTimePart(interval, startOffset, endOffset - startOffset + 1);
+    }
+
 }
diff --git a/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/ATimeSerializerDeserializer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/ATimeSerializerDeserializer.java
index 26e8d7a..8c3134a 100644
--- a/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/ATimeSerializerDeserializer.java
+++ b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/ATimeSerializerDeserializer.java
@@ -8,7 +8,6 @@
 import edu.uci.ics.asterix.om.base.AMutableTime;
 import edu.uci.ics.asterix.om.base.ATime;
 import edu.uci.ics.asterix.om.base.temporal.ATimeParserFactory;
-import edu.uci.ics.asterix.om.base.temporal.StringCharSequenceAccessor;
 import edu.uci.ics.asterix.om.types.BuiltinType;
 import edu.uci.ics.hyracks.api.dataflow.value.ISerializerDeserializer;
 import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
@@ -22,7 +21,8 @@
     @SuppressWarnings("unchecked")
     private static final ISerializerDeserializer<ATime> timeSerde = AqlSerializerDeserializerProvider.INSTANCE
             .getSerializerDeserializer(BuiltinType.ATIME);
-
+    private static final AMutableTime aTime = new AMutableTime(0);
+    
     private ATimeSerializerDeserializer() {
     }
 
@@ -47,13 +47,10 @@
     }
 
     public static void parse(String time, DataOutput out) throws HyracksDataException {
-        AMutableTime aTime = new AMutableTime(0);
         int chrononTimeInMs;
 
         try {
-            StringCharSequenceAccessor charAccessor = new StringCharSequenceAccessor();
-            charAccessor.reset(time, 0, time.length());
-            chrononTimeInMs = ATimeParserFactory.parseTimePart(charAccessor);
+            chrononTimeInMs = ATimeParserFactory.parseTimePart(time, 0, time.length());
         } catch (Exception e) {
             throw new HyracksDataException(e);
         }
diff --git a/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/temporal/ADateParserFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/temporal/ADateParserFactory.java
index 8192919..c1fbcb2 100644
--- a/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/temporal/ADateParserFactory.java
+++ b/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/temporal/ADateParserFactory.java
@@ -36,15 +36,12 @@
     @Override
     public IValueParser createValueParser() {
 
-        final CharArrayCharSequenceAccessor charArrayAccessor = new CharArrayCharSequenceAccessor();
-
         return new IValueParser() {
 
             @Override
             public void parse(char[] buffer, int start, int length, DataOutput out) throws HyracksDataException {
-                charArrayAccessor.reset(buffer, start, length);
                 try {
-                    out.writeInt((int) (parseDatePart(charArrayAccessor, true) / GregorianCalendarSystem.CHRONON_OF_DAY));
+                    out.writeInt((int) (parseDatePart(buffer, start, length) / GregorianCalendarSystem.CHRONON_OF_DAY));
                 } catch (IOException ex) {
                     throw new HyracksDataException(ex);
                 }
@@ -63,10 +60,9 @@
      * @return
      * @throws Exception
      */
-    public static <T> long parseDatePart(ICharSequenceAccessor<T> charAccessor, boolean isDateOnly)
+    public static long parseDatePart(String dateString, int start, int length)
             throws HyracksDataException {
 
-        int length = charAccessor.getLength();
         int offset = 0;
 
         int year = 0, month = 0, day = 0;
@@ -74,26 +70,25 @@
 
         boolean isExtendedForm = false;
 
-        if (charAccessor.getCharAt(offset) == '-') {
+        if (dateString.charAt(start + offset) == '-') {
             offset++;
             positive = false;
         }
 
-        if ((isDateOnly) && charAccessor.getCharAt(offset + 4) == '-' || (!isDateOnly)
-                && charAccessor.getCharAt(offset + 13) == ':') {
+        if (dateString.charAt(start + offset + 4) == '-') {
             isExtendedForm = true;
         }
 
         if (isExtendedForm) {
-            if (charAccessor.getCharAt(offset + 4) != '-' || charAccessor.getCharAt(offset + 7) != '-') {
+            if (dateString.charAt(start + offset + 4) != '-' || dateString.charAt(start + offset + 7) != '-') {
                 throw new HyracksDataException("Missing dash in the date string as an extended form");
             }
         }
 
         // year
         for (int i = 0; i < 4; i++) {
-            if (charAccessor.getCharAt(offset + i) >= '0' && charAccessor.getCharAt(offset + i) <= '9') {
-                year = year * 10 + charAccessor.getCharAt(offset + i) - '0';
+            if (dateString.charAt(start + offset + i) >= '0' && dateString.charAt(start + offset + i) <= '9') {
+                year = year * 10 + dateString.charAt(start + offset + i) - '0';
             } else {
                 throw new HyracksDataException("Non-numeric value in year field");
             }
@@ -108,8 +103,8 @@
 
         // month
         for (int i = 0; i < 2; i++) {
-            if ((charAccessor.getCharAt(offset + i) >= '0' && charAccessor.getCharAt(offset + i) <= '9')) {
-                month = month * 10 + charAccessor.getCharAt(offset + i) - '0';
+            if ((dateString.charAt(start + offset + i) >= '0' && dateString.charAt(start + offset + i) <= '9')) {
+                month = month * 10 + dateString.charAt(start + offset + i) - '0';
             } else {
                 throw new HyracksDataException("Non-numeric value in month field");
             }
@@ -123,8 +118,8 @@
 
         // day
         for (int i = 0; i < 2; i++) {
-            if ((charAccessor.getCharAt(offset + i) >= '0' && charAccessor.getCharAt(offset + i) <= '9')) {
-                day = day * 10 + charAccessor.getCharAt(offset + i) - '0';
+            if ((dateString.charAt(start + offset + i) >= '0' && dateString.charAt(start + offset + i) <= '9')) {
+                day = day * 10 + dateString.charAt(start + offset + i) - '0';
             } else {
                 throw new HyracksDataException("Non-numeric value in day field");
             }
@@ -141,10 +136,208 @@
             year *= -1;
         }
 
-        if (isDateOnly && length > offset) {
+        if (length > offset) {
             throw new HyracksDataException("Too many chars for a date only value");
         }
+        
+        if (!GregorianCalendarSystem.getInstance().validate(year, month, day, 0, 0, 0, 0)){
+            throw new HyracksDataException(dateErrorMessage);
+        }
+        
+        return GregorianCalendarSystem.getInstance().getChronon(year, month, day, 0, 0, 0, 0, 0);
+    }
+    
+    /**
+     * A copy-and-paste of {@link #parseDatePart(String, int, int)} but for a char array, in order
+     * to avoid object creation.
+     * 
+     * @param dateString
+     * @param start
+     * @param length
+     * @return
+     * @throws HyracksDataException
+     */
+    public static long parseDatePart(char[] dateString, int start, int length)
+            throws HyracksDataException {
+
+        int offset = 0;
+
+        int year = 0, month = 0, day = 0;
+        boolean positive = true;
+
+        boolean isExtendedForm = false;
+
+        if (dateString[start + offset] == '-') {
+            offset++;
+            positive = false;
+        }
+
+        if (dateString[start + offset + 4] == '-') {
+            isExtendedForm = true;
+        }
+
+        if (isExtendedForm) {
+            if (dateString[start + offset + 4] != '-' || dateString[start + offset + 7] != '-') {
+                throw new HyracksDataException("Missing dash in the date string as an extended form");
+            }
+        }
+
+        // year
+        for (int i = 0; i < 4; i++) {
+            if (dateString[start + offset + i] >= '0' && dateString[start + offset + i] <= '9') {
+                year = year * 10 + dateString[start + offset + i] - '0';
+            } else {
+                throw new HyracksDataException("Non-numeric value in year field");
+            }
+        }
+
+        if (year < GregorianCalendarSystem.FIELD_MINS[GregorianCalendarSystem.Fields.YEAR.ordinal()]
+                || year > GregorianCalendarSystem.FIELD_MAXS[GregorianCalendarSystem.Fields.YEAR.ordinal()]) {
+            throw new HyracksDataException(dateErrorMessage + ": year " + year);
+        }
+
+        offset += (isExtendedForm) ? 5 : 4;
+
+        // month
+        for (int i = 0; i < 2; i++) {
+            if ((dateString[start + offset + i] >= '0' && dateString[start + offset + i] <= '9')) {
+                month = month * 10 + dateString[start + offset + i] - '0';
+            } else {
+                throw new HyracksDataException("Non-numeric value in month field");
+            }
+        }
+
+        if (month < GregorianCalendarSystem.FIELD_MINS[GregorianCalendarSystem.Fields.MONTH.ordinal()]
+                || month > GregorianCalendarSystem.FIELD_MAXS[GregorianCalendarSystem.Fields.MONTH.ordinal()]) {
+            throw new HyracksDataException(dateErrorMessage + ": month " + month);
+        }
+        offset += (isExtendedForm) ? 3 : 2;
+
+        // day
+        for (int i = 0; i < 2; i++) {
+            if ((dateString[start + offset + i] >= '0' && dateString[start + offset + i] <= '9')) {
+                day = day * 10 + dateString[start + offset + i] - '0';
+            } else {
+                throw new HyracksDataException("Non-numeric value in day field");
+            }
+        }
+
+        if (day < GregorianCalendarSystem.FIELD_MINS[GregorianCalendarSystem.Fields.DAY.ordinal()]
+                || day > GregorianCalendarSystem.FIELD_MAXS[GregorianCalendarSystem.Fields.DAY.ordinal()]) {
+            throw new HyracksDataException(dateErrorMessage + ": day " + day);
+        }
+
+        offset += 2;
+
+        if (!positive) {
+            year *= -1;
+        }
+
+        if (length > offset) {
+            throw new HyracksDataException("Too many chars for a date only value");
+        }
+        
+        if (!GregorianCalendarSystem.getInstance().validate(year, month, day, 0, 0, 0, 0)){
+            throw new HyracksDataException(dateErrorMessage);
+        }
+        
         return GregorianCalendarSystem.getInstance().getChronon(year, month, day, 0, 0, 0, 0, 0);
     }
 
+    /**
+     * A copy-and-paste of {@link #parseDatePart(String, int, int)} but for a byte array, in order
+     * to avoid object creation.
+     * 
+     * @param dateString
+     * @param start
+     * @param length
+     * @return
+     * @throws HyracksDataException
+     */
+    public static long parseDatePart(byte[] dateString, int start, int length)
+            throws HyracksDataException {
+
+        int offset = 0;
+
+        int year = 0, month = 0, day = 0;
+        boolean positive = true;
+
+        boolean isExtendedForm = false;
+
+        if (dateString[start + offset] == '-') {
+            offset++;
+            positive = false;
+        }
+
+        if (dateString[start + offset + 4] == '-') {
+            isExtendedForm = true;
+        }
+
+        if (isExtendedForm) {
+            if (dateString[start + offset + 4] != '-' || dateString[start + offset + 7] != '-') {
+                throw new HyracksDataException("Missing dash in the date string as an extended form");
+            }
+        }
+
+        // year
+        for (int i = 0; i < 4; i++) {
+            if (dateString[start + offset + i] >= '0' && dateString[start + offset + i] <= '9') {
+                year = year * 10 + dateString[start + offset + i] - '0';
+            } else {
+                throw new HyracksDataException("Non-numeric value in year field");
+            }
+        }
+
+        if (year < GregorianCalendarSystem.FIELD_MINS[GregorianCalendarSystem.Fields.YEAR.ordinal()]
+                || year > GregorianCalendarSystem.FIELD_MAXS[GregorianCalendarSystem.Fields.YEAR.ordinal()]) {
+            throw new HyracksDataException(dateErrorMessage + ": year " + year);
+        }
+
+        offset += (isExtendedForm) ? 5 : 4;
+
+        // month
+        for (int i = 0; i < 2; i++) {
+            if ((dateString[start + offset + i] >= '0' && dateString[start + offset + i] <= '9')) {
+                month = month * 10 + dateString[start + offset + i] - '0';
+            } else {
+                throw new HyracksDataException("Non-numeric value in month field");
+            }
+        }
+
+        if (month < GregorianCalendarSystem.FIELD_MINS[GregorianCalendarSystem.Fields.MONTH.ordinal()]
+                || month > GregorianCalendarSystem.FIELD_MAXS[GregorianCalendarSystem.Fields.MONTH.ordinal()]) {
+            throw new HyracksDataException(dateErrorMessage + ": month " + month);
+        }
+        offset += (isExtendedForm) ? 3 : 2;
+
+        // day
+        for (int i = 0; i < 2; i++) {
+            if ((dateString[start + offset + i] >= '0' && dateString[start + offset + i] <= '9')) {
+                day = day * 10 + dateString[start + offset + i] - '0';
+            } else {
+                throw new HyracksDataException("Non-numeric value in day field");
+            }
+        }
+
+        if (day < GregorianCalendarSystem.FIELD_MINS[GregorianCalendarSystem.Fields.DAY.ordinal()]
+                || day > GregorianCalendarSystem.FIELD_MAXS[GregorianCalendarSystem.Fields.DAY.ordinal()]) {
+            throw new HyracksDataException(dateErrorMessage + ": day " + day);
+        }
+
+        offset += 2;
+
+        if (!positive) {
+            year *= -1;
+        }
+
+        if (length > offset) {
+            throw new HyracksDataException("Too many chars for a date only value");
+        }
+        
+        if (!GregorianCalendarSystem.getInstance().validate(year, month, day, 0, 0, 0, 0)){
+            throw new HyracksDataException(dateErrorMessage);
+        }
+        
+        return GregorianCalendarSystem.getInstance().getChronon(year, month, day, 0, 0, 0, 0, 0);
+    }
 }
diff --git a/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/temporal/ADateTimeParserFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/temporal/ADateTimeParserFactory.java
index 2df3c3b..c95ac3a 100644
--- a/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/temporal/ADateTimeParserFactory.java
+++ b/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/temporal/ADateTimeParserFactory.java
@@ -36,31 +36,27 @@
     @Override
     public IValueParser createValueParser() {
 
-        final CharArrayCharSequenceAccessor charArrayAccessor = new CharArrayCharSequenceAccessor();
-
         return new IValueParser() {
 
             @Override
             public void parse(char[] buffer, int start, int length, DataOutput out) throws HyracksDataException {
                 long chrononTimeInMs = 0;
 
-                charArrayAccessor.reset(buffer, start, length);
+                short timeOffset = (short) ((buffer[start] == '-') ? 1 : 0);
 
-                short timeOffset = (short) ((charArrayAccessor.getCharAt(0) == '-') ? 1 : 0);
+                timeOffset += 8;
 
-                if (charArrayAccessor.getCharAt(timeOffset + 10) != 'T'
-                        && charArrayAccessor.getCharAt(timeOffset + 8) != 'T') {
-                    throw new HyracksDataException(dateTimeErrorMessage + ": missing T");
+                if (buffer[start + timeOffset] != 'T') {
+                    timeOffset += 2;
+                    if (buffer[start + timeOffset] != 'T') {
+                        throw new HyracksDataException(dateTimeErrorMessage + ": missing T");
+                    }
                 }
 
-                // if extended form 11, else 9
-                timeOffset += (charArrayAccessor.getCharAt(timeOffset + 13) == ':') ? (short) (11) : (short) (9);
+                chrononTimeInMs = ADateParserFactory.parseDatePart(buffer, start, timeOffset);
 
-                chrononTimeInMs = ADateParserFactory.parseDatePart(charArrayAccessor, false);
-
-                charArrayAccessor.reset(buffer, start + timeOffset, length - timeOffset);
-
-                chrononTimeInMs += ATimeParserFactory.parseTimePart(charArrayAccessor);
+                chrononTimeInMs += ATimeParserFactory.parseTimePart(buffer, start + timeOffset + 1, length - timeOffset
+                        - 1);
 
                 try {
                     out.writeLong(chrononTimeInMs);
diff --git a/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/temporal/ADurationParserFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/temporal/ADurationParserFactory.java
index b176061..de5a6a1 100644
--- a/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/temporal/ADurationParserFactory.java
+++ b/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/temporal/ADurationParserFactory.java
@@ -36,14 +36,12 @@
 
     @Override
     public IValueParser createValueParser() {
-        final CharArrayCharSequenceAccessor charArrayAccessor = new CharArrayCharSequenceAccessor();
         final AMutableDuration aMutableDuration = new AMutableDuration(0, 0);
         return new IValueParser() {
 
             @Override
             public void parse(char[] buffer, int start, int length, DataOutput out) throws HyracksDataException {
-                charArrayAccessor.reset(buffer, start, length);
-                parseDuration(charArrayAccessor, aMutableDuration);
+                parseDuration(buffer, start, length, aMutableDuration);
                 try {
                     out.writeInt(aMutableDuration.getMonths());
                     out.writeLong(aMutableDuration.getMilliseconds());
@@ -66,7 +64,7 @@
         SEC;
     };
 
-    public static <T> void parseDuration(ICharSequenceAccessor<T> charAccessor, AMutableDuration aDuration)
+    public static void parseDuration(String durationString, int start, int length, AMutableDuration aDuration)
             throws HyracksDataException {
 
         boolean positive = true;
@@ -74,21 +72,23 @@
         int value = 0, hour = 0, minute = 0, second = 0, millisecond = 0, year = 0, month = 0, day = 0;
         State state = State.NOTHING_READ;
 
-        if (charAccessor.getCharAt(offset) == '-') {
+        if (durationString.charAt(start + offset) == '-') {
             offset++;
             positive = false;
         }
 
-        if (charAccessor.getCharAt(offset++) != 'P') {
+        if (durationString.charAt(start + offset) != 'P') {
             throw new HyracksDataException(durationErrorMessage + ": Missing leading 'P'.");
         }
 
-        for (; offset < charAccessor.getLength(); offset++) {
-            if (charAccessor.getCharAt(offset) >= '0' && charAccessor.getCharAt(offset) <= '9') {
+        offset++;
+
+        for (; offset < length; offset++) {
+            if (durationString.charAt(start + offset) >= '0' && durationString.charAt(start + offset) <= '9') {
                 // accumulate the digit fields
-                value = value * 10 + charAccessor.getCharAt(offset) - '0';
+                value = value * 10 + durationString.charAt(start + offset) - '0';
             } else {
-                switch (charAccessor.getCharAt(offset)) {
+                switch (durationString.charAt(start + offset)) {
                     case 'Y':
                         if (state.compareTo(State.YEAR) < 0) {
                             year = value;
@@ -139,11 +139,276 @@
                     case '.':
                         if (state.compareTo(State.MILLISEC) < 0) {
                             int i = 1;
-                            for (; offset + i < charAccessor.getLength(); i++) {
-                                if (charAccessor.getCharAt(offset + i) >= '0'
-                                        && charAccessor.getCharAt(offset + i) <= '9') {
+                            for (; offset + i < length; i++) {
+                                if (durationString.charAt(start + offset + i) >= '0'
+                                        && durationString.charAt(start + offset + i) <= '9') {
                                     if (i < 4) {
-                                        millisecond = millisecond * 10 + (charAccessor.getCharAt(offset + i) - '0');
+                                        millisecond = millisecond * 10
+                                                + (durationString.charAt(start + offset + i) - '0');
+                                    } else {
+                                        throw new HyracksDataException(durationErrorMessage
+                                                + ": wrong MILLISECOND field.");
+                                    }
+                                } else {
+                                    break;
+                                }
+                            }
+                            offset += i;
+                            state = State.MILLISEC;
+                        } else {
+                            throw new HyracksDataException(durationErrorMessage + ": wrong MILLISECOND field.");
+                        }
+                    case 'S':
+                        if (state.compareTo(State.SEC) < 0) {
+                            second = value;
+                            state = State.SEC;
+                        } else {
+                            throw new HyracksDataException(durationErrorMessage + ": wrong SECOND field.");
+                        }
+                        break;
+                    default:
+                        throw new HyracksDataException(durationErrorMessage + ": wrong format for duration.");
+
+                }
+                value = 0;
+            }
+        }
+
+        if (state.compareTo(State.TIME) == 0) {
+            throw new HyracksDataException(durationErrorMessage + ": no time fields after time separator.");
+        }
+
+        short temp = 1;
+        if (!positive) {
+            temp = -1;
+        }
+
+        aDuration.setValue(temp * (year * 12 + month), temp
+                * (day * 24 * 3600 * 1000L + 3600 * 1000L * hour + 60 * minute * 1000L + second * 1000L + millisecond));
+
+    }
+
+    /**
+     * Copy-and-paste the code in {@link #parseDuration(String, int, int, AMutableDuration)} in order to eliminate
+     * object creation.
+     * 
+     * @param charAccessor
+     * @param start
+     * @param length
+     * @param aDuration
+     * @throws HyracksDataException
+     */
+    public static void parseDuration(char[] charAccessor, int start, int length, AMutableDuration aDuration)
+            throws HyracksDataException {
+
+        boolean positive = true;
+        int offset = 0;
+        int value = 0, hour = 0, minute = 0, second = 0, millisecond = 0, year = 0, month = 0, day = 0;
+        State state = State.NOTHING_READ;
+
+        if (charAccessor[start + offset] == '-') {
+            offset++;
+            positive = false;
+        }
+
+        if (charAccessor[start + offset] != 'P') {
+            throw new HyracksDataException(durationErrorMessage + ": Missing leading 'P'.");
+        }
+
+        offset++;
+
+        for (; offset < length; offset++) {
+            if (charAccessor[start + offset] >= '0' && charAccessor[start + offset] <= '9') {
+                // accumulate the digit fields
+                value = value * 10 + charAccessor[start + offset] - '0';
+            } else {
+                switch (charAccessor[start + offset]) {
+                    case 'Y':
+                        if (state.compareTo(State.YEAR) < 0) {
+                            year = value;
+                            state = State.YEAR;
+                        } else {
+                            throw new HyracksDataException(durationErrorMessage + ": wrong YEAR feild.");
+                        }
+                        break;
+                    case 'M':
+                        if (state.compareTo(State.TIME) < 0) {
+                            if (state.compareTo(State.MONTH) < 0) {
+                                month = value;
+                                state = State.MONTH;
+                            } else {
+                                throw new HyracksDataException(durationErrorMessage + ": wrong MONTH field.");
+                            }
+                        } else if (state.compareTo(State.MIN) < 0) {
+                            minute = value;
+                            state = State.MIN;
+                        } else {
+                            throw new HyracksDataException(durationErrorMessage + ": wrong MIN field.");
+                        }
+                        break;
+                    case 'D':
+                        if (state.compareTo(State.DAY) < 0) {
+                            day = value;
+                            state = State.DAY;
+                        } else {
+                            throw new HyracksDataException(durationErrorMessage + ": wrong DAY field");
+                        }
+                        break;
+                    case 'T':
+                        if (state.compareTo(State.TIME) < 0) {
+                            state = State.TIME;
+                        } else {
+                            throw new HyracksDataException(durationErrorMessage + ": wrong TIME field.");
+                        }
+                        break;
+
+                    case 'H':
+                        if (state.compareTo(State.HOUR) < 0) {
+                            hour = value;
+                            state = State.HOUR;
+                        } else {
+                            throw new HyracksDataException(durationErrorMessage + ": wrong HOUR field.");
+                        }
+                        break;
+                    case '.':
+                        if (state.compareTo(State.MILLISEC) < 0) {
+                            int i = 1;
+                            for (; offset + i < length; i++) {
+                                if (charAccessor[start + offset + i] >= '0' && charAccessor[start + offset + i] <= '9') {
+                                    if (i < 4) {
+                                        millisecond = millisecond * 10 + (charAccessor[start + offset + i] - '0');
+                                    } else {
+                                        throw new HyracksDataException(durationErrorMessage
+                                                + ": wrong MILLISECOND field.");
+                                    }
+                                } else {
+                                    break;
+                                }
+                            }
+                            offset += i;
+                            state = State.MILLISEC;
+                        } else {
+                            throw new HyracksDataException(durationErrorMessage + ": wrong MILLISECOND field.");
+                        }
+                    case 'S':
+                        if (state.compareTo(State.SEC) < 0) {
+                            second = value;
+                            state = State.SEC;
+                        } else {
+                            throw new HyracksDataException(durationErrorMessage + ": wrong SECOND field.");
+                        }
+                        break;
+                    default:
+                        throw new HyracksDataException(durationErrorMessage + ": wrong format for duration.");
+
+                }
+                value = 0;
+            }
+        }
+
+        if (state.compareTo(State.TIME) == 0) {
+            throw new HyracksDataException(durationErrorMessage + ": no time fields after time separator.");
+        }
+
+        short temp = 1;
+        if (!positive) {
+            temp = -1;
+        }
+
+        aDuration.setValue(temp * (year * 12 + month), temp
+                * (day * 24 * 3600 * 1000L + 3600 * 1000L * hour + 60 * minute * 1000L + second * 1000L + millisecond));
+
+    }
+
+    /**
+     * Copy-and-paste the code in {@link #parseDuration(String, int, int, AMutableDuration)} in order to eliminate
+     * object creation.
+     * 
+     * @param charAccessor
+     * @param start
+     * @param length
+     * @param aDuration
+     * @throws HyracksDataException
+     */
+    public static void parseDuration(byte[] charAccessor, int start, int length, AMutableDuration aDuration)
+            throws HyracksDataException {
+
+        boolean positive = true;
+        int offset = 0;
+        int value = 0, hour = 0, minute = 0, second = 0, millisecond = 0, year = 0, month = 0, day = 0;
+        State state = State.NOTHING_READ;
+
+        if (charAccessor[start + offset] == '-') {
+            offset++;
+            positive = false;
+        }
+
+        if (charAccessor[start + offset] != 'P') {
+            throw new HyracksDataException(durationErrorMessage + ": Missing leading 'P'.");
+        }
+
+        offset++;
+
+        for (; offset < length; offset++) {
+            if (charAccessor[start + offset] >= '0' && charAccessor[start + offset] <= '9') {
+                // accumulate the digit fields
+                value = value * 10 + charAccessor[start + offset] - '0';
+            } else {
+                switch (charAccessor[start + offset]) {
+                    case 'Y':
+                        if (state.compareTo(State.YEAR) < 0) {
+                            year = value;
+                            state = State.YEAR;
+                        } else {
+                            throw new HyracksDataException(durationErrorMessage + ": wrong YEAR feild.");
+                        }
+                        break;
+                    case 'M':
+                        if (state.compareTo(State.TIME) < 0) {
+                            if (state.compareTo(State.MONTH) < 0) {
+                                month = value;
+                                state = State.MONTH;
+                            } else {
+                                throw new HyracksDataException(durationErrorMessage + ": wrong MONTH field.");
+                            }
+                        } else if (state.compareTo(State.MIN) < 0) {
+                            minute = value;
+                            state = State.MIN;
+                        } else {
+                            throw new HyracksDataException(durationErrorMessage + ": wrong MIN field.");
+                        }
+                        break;
+                    case 'D':
+                        if (state.compareTo(State.DAY) < 0) {
+                            day = value;
+                            state = State.DAY;
+                        } else {
+                            throw new HyracksDataException(durationErrorMessage + ": wrong DAY field");
+                        }
+                        break;
+                    case 'T':
+                        if (state.compareTo(State.TIME) < 0) {
+                            state = State.TIME;
+                        } else {
+                            throw new HyracksDataException(durationErrorMessage + ": wrong TIME field.");
+                        }
+                        break;
+
+                    case 'H':
+                        if (state.compareTo(State.HOUR) < 0) {
+                            hour = value;
+                            state = State.HOUR;
+                        } else {
+                            throw new HyracksDataException(durationErrorMessage + ": wrong HOUR field.");
+                        }
+                        break;
+                    case '.':
+                        if (state.compareTo(State.MILLISEC) < 0) {
+                            int i = 1;
+                            for (; offset + i < length; i++) {
+                                if (charAccessor[start + offset + i] >= '0' && charAccessor[start + offset + i] <= '9') {
+                                    if (i < 4) {
+                                        millisecond = millisecond * 10 + (charAccessor[start + offset + i] - '0');
                                     } else {
                                         throw new HyracksDataException(durationErrorMessage
                                                 + ": wrong MILLISECOND field.");
diff --git a/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/temporal/ATimeParserFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/temporal/ATimeParserFactory.java
index d76f41d..c0f0957 100644
--- a/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/temporal/ATimeParserFactory.java
+++ b/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/temporal/ATimeParserFactory.java
@@ -36,15 +36,12 @@
     @Override
     public IValueParser createValueParser() {
 
-        final CharArrayCharSequenceAccessor charArrayAccessor = new CharArrayCharSequenceAccessor();
-
         return new IValueParser() {
 
             @Override
             public void parse(char[] buffer, int start, int length, DataOutput out) throws HyracksDataException {
-                charArrayAccessor.reset(buffer, start, length);
                 try {
-                    out.writeInt(parseTimePart(charArrayAccessor));
+                    out.writeInt(parseTimePart(buffer, start, length));
                 } catch (IOException ex) {
                     throw new HyracksDataException(ex);
                 }
@@ -53,32 +50,34 @@
     }
 
     /**
-     * Parse the given char sequence as a time string, and return the milliseconds represented by the time.
+     * Parse the given string as a time string, and return the milliseconds represented by the time.
      * 
-     * @param charAccessor
+     * @param timeString
+     * @param start
+     * @param length
      * @return
-     * @throws Exception
+     * @throws HyracksDataException
      */
-    public static <T> int parseTimePart(ICharSequenceAccessor<T> charAccessor) throws HyracksDataException {
+    public static int parseTimePart(String timeString, int start, int length) throws HyracksDataException {
 
-        int length = charAccessor.getLength();
         int offset = 0;
 
         int hour = 0, min = 0, sec = 0, millis = 0;
         int timezone = 0;
 
         boolean isExtendedForm = false;
-        if (charAccessor.getCharAt(offset + 2) == ':') {
+        if (timeString.charAt(start + offset + 2) == ':') {
             isExtendedForm = true;
         }
 
-        if (isExtendedForm && (charAccessor.getCharAt(offset + 2) != ':' || charAccessor.getCharAt(offset + 5) != ':')) {
+        if (isExtendedForm
+                && (timeString.charAt(start + offset + 2) != ':' || timeString.charAt(start + offset + 5) != ':')) {
             throw new HyracksDataException(timeErrorMessage + ": Missing colon in an extended time format.");
         }
         // hour
         for (int i = 0; i < 2; i++) {
-            if ((charAccessor.getCharAt(offset + i) >= '0' && charAccessor.getCharAt(offset + i) <= '9')) {
-                hour = hour * 10 + charAccessor.getCharAt(offset + i) - '0';
+            if ((timeString.charAt(start + offset + i) >= '0' && timeString.charAt(start + offset + i) <= '9')) {
+                hour = hour * 10 + timeString.charAt(start + offset + i) - '0';
             } else {
                 throw new HyracksDataException(timeErrorMessage + ": Non-numeric value in hour field");
             }
@@ -93,8 +92,8 @@
 
         // minute
         for (int i = 0; i < 2; i++) {
-            if ((charAccessor.getCharAt(offset + i) >= '0' && charAccessor.getCharAt(offset + i) <= '9')) {
-                min = min * 10 + charAccessor.getCharAt(offset + i) - '0';
+            if ((timeString.charAt(start + offset + i) >= '0' && timeString.charAt(start + offset + i) <= '9')) {
+                min = min * 10 + timeString.charAt(start + offset + i) - '0';
             } else {
                 throw new HyracksDataException(timeErrorMessage + ": Non-numeric value in minute field");
             }
@@ -109,8 +108,8 @@
 
         // second
         for (int i = 0; i < 2; i++) {
-            if ((charAccessor.getCharAt(offset + i) >= '0' && charAccessor.getCharAt(offset + i) <= '9')) {
-                sec = sec * 10 + charAccessor.getCharAt(offset + i) - '0';
+            if ((timeString.charAt(start + offset + i) >= '0' && timeString.charAt(start + offset + i) <= '9')) {
+                sec = sec * 10 + timeString.charAt(start + offset + i) - '0';
             } else {
                 throw new HyracksDataException(timeErrorMessage + ": Non-numeric value in second field");
             }
@@ -123,14 +122,14 @@
 
         offset += 2;
 
-        if ((isExtendedForm && length > offset && charAccessor.getCharAt(offset) == '.')
+        if ((isExtendedForm && length > offset && timeString.charAt(start + offset) == '.')
                 || (!isExtendedForm && length > offset)) {
 
             offset += (isExtendedForm) ? 1 : 0;
             int i = 0;
             for (; i < 3 && offset + i < length; i++) {
-                if (charAccessor.getCharAt(offset + i) >= '0' && charAccessor.getCharAt(offset + i) <= '9') {
-                    millis = millis * 10 + charAccessor.getCharAt(offset + i) - '0';
+                if (timeString.charAt(start + offset + i) >= '0' && timeString.charAt(start + offset + i) <= '9') {
+                    millis = millis * 10 + timeString.charAt(start + offset + i) - '0';
                 } else {
                     break;
                 }
@@ -143,32 +142,31 @@
             }
 
             // error is thrown if more than three digits are seen for the millisecond part
-            if (charAccessor.getLength() > offset && charAccessor.getCharAt(offset) >= '0'
-                    && charAccessor.getCharAt(offset) <= '9') {
+            if (length > offset && timeString.charAt(start + offset) >= '0' && timeString.charAt(start + offset) <= '9') {
                 throw new HyracksDataException(timeErrorMessage + ": too many fields for millisecond.");
             }
         }
 
         if (length > offset) {
-            timezone = parseTimezonePart(charAccessor, offset);
+            timezone = parseTimezonePart(timeString, start + offset);
         }
 
         return GregorianCalendarSystem.getInstance().getChronon(hour, min, sec, millis, timezone);
     }
 
     /**
-     * Parse the given char sequence as a time string, and return the milliseconds represented by the time.
+     * Parse the given string as a time string, and parse the timezone field.
      * 
-     * @param charAccessor
+     * @param timeString
+     * @param start
      * @return
-     * @throws Exception
+     * @throws HyracksDataException
      */
-    public static <T> int parseTimezonePart(ICharSequenceAccessor<T> charAccessor, int offset)
-            throws HyracksDataException {
+    public static int parseTimezonePart(String timeString, int start) throws HyracksDataException {
         int timezone = 0;
 
-        if (charAccessor.getCharAt(offset) != 'Z') {
-            if ((charAccessor.getCharAt(offset) != '+' && charAccessor.getCharAt(offset) != '-')) {
+        if (timeString.charAt(start) != 'Z') {
+            if ((timeString.charAt(start) != '+' && timeString.charAt(start) != '-')) {
                 throw new HyracksDataException("Wrong timezone format: missing sign or missing colon for a time zone");
             }
 
@@ -176,8 +174,8 @@
             short timezoneMinute = 0;
 
             for (int i = 0; i < 2; i++) {
-                if ((charAccessor.getCharAt(offset + 1 + i) >= '0' && charAccessor.getCharAt(offset + 1 + i) <= '9')) {
-                    timezoneHour = (short) (timezoneHour * 10 + charAccessor.getCharAt(offset + 1 + i) - '0');
+                if ((timeString.charAt(start + 1 + i) >= '0' && timeString.charAt(start + 1 + i) <= '9')) {
+                    timezoneHour = (short) (timezoneHour * 10 + timeString.charAt(start + 1 + i) - '0');
                 } else {
                     throw new HyracksDataException(timeErrorMessage + ": Non-numeric value in timezone hour field");
                 }
@@ -188,13 +186,12 @@
                 throw new HyracksDataException(timeErrorMessage + ": time zone hour " + timezoneHour);
             }
 
-            int temp_offset = (charAccessor.getCharAt(offset + 3) == ':') ? 1 : 0;
+            int temp_offset = (timeString.charAt(start + 3) == ':') ? 1 : 0;
 
             for (int i = 0; i < 2; i++) {
-                if ((charAccessor.getCharAt(offset + temp_offset + 3 + i) >= '0' && charAccessor.getCharAt(offset
-                        + temp_offset + 3 + i) <= '9')) {
-                    timezoneMinute = (short) (timezoneMinute * 10
-                            + charAccessor.getCharAt(offset + temp_offset + 3 + i) - '0');
+                if ((timeString.charAt(start + temp_offset + 3 + i) >= '0' && timeString.charAt(start + temp_offset + 3
+                        + i) <= '9')) {
+                    timezoneMinute = (short) (timezoneMinute * 10 + timeString.charAt(start + temp_offset + 3 + i) - '0');
                 } else {
                     throw new HyracksDataException(timeErrorMessage + ": Non-numeric value in timezone minute field");
                 }
@@ -205,7 +202,333 @@
                 throw new HyracksDataException(timeErrorMessage + ": time zone minute " + timezoneMinute);
             }
 
-            if (charAccessor.getCharAt(offset) == '-') {
+            if (timeString.charAt(start) == '-') {
+                timezone = (byte) -((timezoneHour * 4) + timezoneMinute / 15);
+            } else {
+                timezone = (byte) ((timezoneHour * 4) + timezoneMinute / 15);
+            }
+        }
+        return timezone;
+    }
+
+    /**
+     * Similar to {@link #parseTimePart(String, int, int)} but use a char array as input; although this is almost
+     * a copy-and-past code but it avoids object creation.
+     * 
+     * @param timeString
+     * @param start
+     * @param length
+     * @return
+     * @throws HyracksDataException
+     */
+    public static int parseTimePart(char[] timeString, int start, int length) throws HyracksDataException {
+
+        int offset = 0;
+
+        int hour = 0, min = 0, sec = 0, millis = 0;
+        int timezone = 0;
+
+        boolean isExtendedForm = false;
+        if (timeString[start + offset + 2] == ':') {
+            isExtendedForm = true;
+        }
+
+        if (isExtendedForm && (timeString[start + offset + 2] != ':' || timeString[start + offset + 5] != ':')) {
+            throw new HyracksDataException(timeErrorMessage + ": Missing colon in an extended time format.");
+        }
+        // hour
+        for (int i = 0; i < 2; i++) {
+            if ((timeString[start + offset + i] >= '0' && timeString[start + offset + i] <= '9')) {
+                hour = hour * 10 + timeString[start + offset + i] - '0';
+            } else {
+                throw new HyracksDataException(timeErrorMessage + ": Non-numeric value in hour field");
+            }
+        }
+
+        if (hour < GregorianCalendarSystem.FIELD_MINS[GregorianCalendarSystem.Fields.HOUR.ordinal()]
+                || hour > GregorianCalendarSystem.FIELD_MAXS[GregorianCalendarSystem.Fields.HOUR.ordinal()]) {
+            throw new HyracksDataException(timeErrorMessage + ": hour " + hour);
+        }
+
+        offset += (isExtendedForm) ? 3 : 2;
+
+        // minute
+        for (int i = 0; i < 2; i++) {
+            if ((timeString[start + offset + i] >= '0' && timeString[start + offset + i] <= '9')) {
+                min = min * 10 + timeString[start + offset + i] - '0';
+            } else {
+                throw new HyracksDataException(timeErrorMessage + ": Non-numeric value in minute field");
+            }
+        }
+
+        if (min < GregorianCalendarSystem.FIELD_MINS[GregorianCalendarSystem.Fields.MINUTE.ordinal()]
+                || min > GregorianCalendarSystem.FIELD_MAXS[GregorianCalendarSystem.Fields.MINUTE.ordinal()]) {
+            throw new HyracksDataException(timeErrorMessage + ": min " + min);
+        }
+
+        offset += (isExtendedForm) ? 3 : 2;
+
+        // second
+        for (int i = 0; i < 2; i++) {
+            if ((timeString[start + offset + i] >= '0' && timeString[start + offset + i] <= '9')) {
+                sec = sec * 10 + timeString[start + offset + i] - '0';
+            } else {
+                throw new HyracksDataException(timeErrorMessage + ": Non-numeric value in second field");
+            }
+        }
+
+        if (sec < GregorianCalendarSystem.FIELD_MINS[GregorianCalendarSystem.Fields.SECOND.ordinal()]
+                || sec > GregorianCalendarSystem.FIELD_MAXS[GregorianCalendarSystem.Fields.SECOND.ordinal()]) {
+            throw new HyracksDataException(timeErrorMessage + ": sec " + sec);
+        }
+
+        offset += 2;
+
+        if ((isExtendedForm && length > offset && timeString[start + offset] == '.')
+                || (!isExtendedForm && length > offset)) {
+
+            offset += (isExtendedForm) ? 1 : 0;
+            int i = 0;
+            for (; i < 3 && offset + i < length; i++) {
+                if (timeString[start + offset + i] >= '0' && timeString[start + offset + i] <= '9') {
+                    millis = millis * 10 + timeString[start + offset + i] - '0';
+                } else {
+                    break;
+                }
+            }
+
+            offset += i;
+
+            for (; i < 3; i++) {
+                millis = millis * 10;
+            }
+
+            // error is thrown if more than three digits are seen for the millisecond part
+            if (length > offset && timeString[start + offset] >= '0' && timeString[start + offset] <= '9') {
+                throw new HyracksDataException(timeErrorMessage + ": too many fields for millisecond.");
+            }
+        }
+
+        if (length > offset) {
+            timezone = parseTimezonePart(timeString, start + offset);
+        }
+
+        return GregorianCalendarSystem.getInstance().getChronon(hour, min, sec, millis, timezone);
+    }
+
+    /**
+     * Similar to {@link #parseTimezonePart(String, int)} but use a char array as input; although this is almost
+     * a copy-and-past code but it avoids object creation.
+     * 
+     * @param timeString
+     * @param start
+     * @param length
+     * @return
+     * @throws HyracksDataException
+     */
+    public static int parseTimezonePart(char[] timeString, int start) throws HyracksDataException {
+        int timezone = 0;
+
+        if (timeString[start] != 'Z') {
+            if ((timeString[start] != '+' && timeString[start] != '-')) {
+                throw new HyracksDataException("Wrong timezone format: missing sign or missing colon for a time zone");
+            }
+
+            short timezoneHour = 0;
+            short timezoneMinute = 0;
+
+            for (int i = 0; i < 2; i++) {
+                if ((timeString[start + 1 + i] >= '0' && timeString[start + 1 + i] <= '9')) {
+                    timezoneHour = (short) (timezoneHour * 10 + timeString[start + 1 + i] - '0');
+                } else {
+                    throw new HyracksDataException(timeErrorMessage + ": Non-numeric value in timezone hour field");
+                }
+            }
+
+            if (timezoneHour < GregorianCalendarSystem.TIMEZONE_HOUR_MIN
+                    || timezoneHour > GregorianCalendarSystem.TIMEZONE_HOUR_MAX) {
+                throw new HyracksDataException(timeErrorMessage + ": time zone hour " + timezoneHour);
+            }
+
+            int temp_offset = (timeString[start + 3] == ':') ? 1 : 0;
+
+            for (int i = 0; i < 2; i++) {
+                if ((timeString[start + temp_offset + 3 + i] >= '0' && timeString[start + temp_offset + 3 + i] <= '9')) {
+                    timezoneMinute = (short) (timezoneMinute * 10 + timeString[start + temp_offset + 3 + i] - '0');
+                } else {
+                    throw new HyracksDataException(timeErrorMessage + ": Non-numeric value in timezone minute field");
+                }
+            }
+
+            if (timezoneMinute < GregorianCalendarSystem.TIMEZONE_MIN_MIN
+                    || timezoneMinute > GregorianCalendarSystem.TIMEZONE_MIN_MAX) {
+                throw new HyracksDataException(timeErrorMessage + ": time zone minute " + timezoneMinute);
+            }
+
+            if (timeString[start] == '-') {
+                timezone = (byte) -((timezoneHour * 4) + timezoneMinute / 15);
+            } else {
+                timezone = (byte) ((timezoneHour * 4) + timezoneMinute / 15);
+            }
+        }
+        return timezone;
+    }
+
+    /**
+     * Similar to {@link #parseTimePart(String, int, int)} but use a byte array as input; although this is almost
+     * a copy-and-past code but it avoids object creation.
+     * 
+     * @param timeString
+     * @param start
+     * @param length
+     * @return
+     * @throws HyracksDataException
+     */
+    public static int parseTimePart(byte[] timeString, int start, int length) throws HyracksDataException {
+
+        int offset = 0;
+
+        int hour = 0, min = 0, sec = 0, millis = 0;
+        int timezone = 0;
+
+        boolean isExtendedForm = false;
+        if (timeString[start + offset + 2] == ':') {
+            isExtendedForm = true;
+        }
+
+        if (isExtendedForm && (timeString[start + offset + 2] != ':' || timeString[start + offset + 5] != ':')) {
+            throw new HyracksDataException(timeErrorMessage + ": Missing colon in an extended time format.");
+        }
+        // hour
+        for (int i = 0; i < 2; i++) {
+            if ((timeString[start + offset + i] >= '0' && timeString[start + offset + i] <= '9')) {
+                hour = hour * 10 + timeString[start + offset + i] - '0';
+            } else {
+                throw new HyracksDataException(timeErrorMessage + ": Non-numeric value in hour field");
+            }
+        }
+
+        if (hour < GregorianCalendarSystem.FIELD_MINS[GregorianCalendarSystem.Fields.HOUR.ordinal()]
+                || hour > GregorianCalendarSystem.FIELD_MAXS[GregorianCalendarSystem.Fields.HOUR.ordinal()]) {
+            throw new HyracksDataException(timeErrorMessage + ": hour " + hour);
+        }
+
+        offset += (isExtendedForm) ? 3 : 2;
+
+        // minute
+        for (int i = 0; i < 2; i++) {
+            if ((timeString[start + offset + i] >= '0' && timeString[start + offset + i] <= '9')) {
+                min = min * 10 + timeString[start + offset + i] - '0';
+            } else {
+                throw new HyracksDataException(timeErrorMessage + ": Non-numeric value in minute field");
+            }
+        }
+
+        if (min < GregorianCalendarSystem.FIELD_MINS[GregorianCalendarSystem.Fields.MINUTE.ordinal()]
+                || min > GregorianCalendarSystem.FIELD_MAXS[GregorianCalendarSystem.Fields.MINUTE.ordinal()]) {
+            throw new HyracksDataException(timeErrorMessage + ": min " + min);
+        }
+
+        offset += (isExtendedForm) ? 3 : 2;
+
+        // second
+        for (int i = 0; i < 2; i++) {
+            if ((timeString[start + offset + i] >= '0' && timeString[start + offset + i] <= '9')) {
+                sec = sec * 10 + timeString[start + offset + i] - '0';
+            } else {
+                throw new HyracksDataException(timeErrorMessage + ": Non-numeric value in second field");
+            }
+        }
+
+        if (sec < GregorianCalendarSystem.FIELD_MINS[GregorianCalendarSystem.Fields.SECOND.ordinal()]
+                || sec > GregorianCalendarSystem.FIELD_MAXS[GregorianCalendarSystem.Fields.SECOND.ordinal()]) {
+            throw new HyracksDataException(timeErrorMessage + ": sec " + sec);
+        }
+
+        offset += 2;
+
+        if ((isExtendedForm && length > offset && timeString[start + offset] == '.')
+                || (!isExtendedForm && length > offset)) {
+
+            offset += (isExtendedForm) ? 1 : 0;
+            int i = 0;
+            for (; i < 3 && offset + i < length; i++) {
+                if (timeString[start + offset + i] >= '0' && timeString[start + offset + i] <= '9') {
+                    millis = millis * 10 + timeString[start + offset + i] - '0';
+                } else {
+                    break;
+                }
+            }
+
+            offset += i;
+
+            for (; i < 3; i++) {
+                millis = millis * 10;
+            }
+
+            // error is thrown if more than three digits are seen for the millisecond part
+            if (length > offset && timeString[start + offset] >= '0' && timeString[start + offset] <= '9') {
+                throw new HyracksDataException(timeErrorMessage + ": too many fields for millisecond.");
+            }
+        }
+
+        if (length > offset) {
+            timezone = parseTimezonePart(timeString, start + offset);
+        }
+
+        return GregorianCalendarSystem.getInstance().getChronon(hour, min, sec, millis, timezone);
+    }
+
+    /**
+     * Similar to {@link #parseTimezonePart(String, int)} but use a byte array as input; although this is almost
+     * a copy-and-past code but it avoids object creation.
+     * 
+     * @param timeString
+     * @param start
+     * @param length
+     * @return
+     * @throws HyracksDataException
+     */
+    public static int parseTimezonePart(byte[] timeString, int start) throws HyracksDataException {
+        int timezone = 0;
+
+        if (timeString[start] != 'Z') {
+            if ((timeString[start] != '+' && timeString[start] != '-')) {
+                throw new HyracksDataException("Wrong timezone format: missing sign or missing colon for a time zone");
+            }
+
+            short timezoneHour = 0;
+            short timezoneMinute = 0;
+
+            for (int i = 0; i < 2; i++) {
+                if ((timeString[start + 1 + i] >= '0' && timeString[start + 1 + i] <= '9')) {
+                    timezoneHour = (short) (timezoneHour * 10 + timeString[start + 1 + i] - '0');
+                } else {
+                    throw new HyracksDataException(timeErrorMessage + ": Non-numeric value in timezone hour field");
+                }
+            }
+
+            if (timezoneHour < GregorianCalendarSystem.TIMEZONE_HOUR_MIN
+                    || timezoneHour > GregorianCalendarSystem.TIMEZONE_HOUR_MAX) {
+                throw new HyracksDataException(timeErrorMessage + ": time zone hour " + timezoneHour);
+            }
+
+            int temp_offset = (timeString[start + 3] == ':') ? 1 : 0;
+
+            for (int i = 0; i < 2; i++) {
+                if ((timeString[start + temp_offset + 3 + i] >= '0' && timeString[start + temp_offset + 3 + i] <= '9')) {
+                    timezoneMinute = (short) (timezoneMinute * 10 + timeString[start + temp_offset + 3 + i] - '0');
+                } else {
+                    throw new HyracksDataException(timeErrorMessage + ": Non-numeric value in timezone minute field");
+                }
+            }
+
+            if (timezoneMinute < GregorianCalendarSystem.TIMEZONE_MIN_MIN
+                    || timezoneMinute > GregorianCalendarSystem.TIMEZONE_MIN_MAX) {
+                throw new HyracksDataException(timeErrorMessage + ": time zone minute " + timezoneMinute);
+            }
+
+            if (timeString[start] == '-') {
                 timezone = (byte) -((timezoneHour * 4) + timezoneMinute / 15);
             } else {
                 timezone = (byte) ((timezoneHour * 4) + timezoneMinute / 15);
diff --git a/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/temporal/ByteArrayCharSequenceAccessor.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/temporal/ByteArrayCharSequenceAccessor.java
deleted file mode 100644
index 453c86f..0000000
--- a/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/temporal/ByteArrayCharSequenceAccessor.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright 2009-2011 by The Regents of the University of California
- * Licensed 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 from
- * 
- *     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 edu.uci.ics.asterix.om.base.temporal;
-
-import edu.uci.ics.asterix.common.exceptions.AsterixRuntimeException;
-
-public class ByteArrayCharSequenceAccessor implements ICharSequenceAccessor<Byte[]> {
-
-    private byte[] buf;
-    private int offset;
-    private int length;
-
-    @Override
-    public char getCharAt(int index) throws AsterixRuntimeException {
-        if (index < 0 || index >= length) {
-            throw new AsterixRuntimeException("Byte array char accessor is out of bound: " + index + ":" + length);
-        }
-        return (char) (buf[index + offset]);
-    }
-
-    /**
-     * Reset the wrapped byte array.
-     * 
-     * @param obj
-     *            The byte array to be wrapped
-     * @param beginOffset
-     *            The offset of the string stored in the byte array.
-     * @param offset
-     *            The offset of the substring of the string stored (offset from the beginOffset).
-     */
-    public void reset(byte[] obj, int offset, int length) {
-        this.buf = obj;
-        this.offset = offset;
-        this.length = length;
-    }
-
-    @Override
-    public int getLength() {
-        return length;
-    }
-
-}
diff --git a/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/temporal/CharArrayCharSequenceAccessor.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/temporal/CharArrayCharSequenceAccessor.java
deleted file mode 100644
index 404f0ee..0000000
--- a/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/temporal/CharArrayCharSequenceAccessor.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright 2009-2011 by The Regents of the University of California
- * Licensed 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 from
- * 
- *     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 edu.uci.ics.asterix.om.base.temporal;
-
-import edu.uci.ics.asterix.common.exceptions.AsterixRuntimeException;
-
-public class CharArrayCharSequenceAccessor implements ICharSequenceAccessor<char[]> {
-
-    private char[] buf;
-    private int offset;
-    private int length;
-    
-    @Override
-    public char getCharAt(int index) throws AsterixRuntimeException {
-        if (index < 0 || index >= length) {
-            throw new AsterixRuntimeException("Byte array char accessor is out of bound: " + index + ":" + length);
-        }
-        return (char) (buf[index + offset]);
-    }
-
-    /**
-     * Reset the wrapped byte array.
-     * 
-     * @param obj
-     *            The byte array to be wrapped
-     * @param beginOffset
-     *            The offset of the string stored in the byte array.
-     * @param offset
-     *            The offset of the substring of the string stored (offset from the beginOffset).
-     */
-    public void reset(char[] obj, int offset, int length) {
-        this.buf = obj;
-        this.offset = offset;
-        this.length = length;
-    }
-
-    @Override
-    public int getLength() {
-        return length;
- }
-
-}
diff --git a/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/temporal/GregorianCalendarSystem.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/temporal/GregorianCalendarSystem.java
index d43f235..f74af9b 100644
--- a/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/temporal/GregorianCalendarSystem.java
+++ b/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/temporal/GregorianCalendarSystem.java
@@ -135,11 +135,11 @@
         // Check whether leap month.
         if (month == 2) {
             if (isLeapYear(year)) {
-                if (month > DAYS_OF_MONTH_LEAP[1]) {
+                if (day > DAYS_OF_MONTH_LEAP[1]) {
                     return false;
                 }
             } else {
-                if (month > DAYS_OF_MONTH_ORDI[1]) {
+                if (day > DAYS_OF_MONTH_ORDI[1]) {
                     return false;
                 }
             }
diff --git a/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/temporal/ICharSequenceAccessor.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/temporal/ICharSequenceAccessor.java
deleted file mode 100644
index d5a99a0..0000000
--- a/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/temporal/ICharSequenceAccessor.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright 2009-2011 by The Regents of the University of California
- * Licensed 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 from
- * 
- *     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 edu.uci.ics.asterix.om.base.temporal;
-
-import edu.uci.ics.asterix.common.exceptions.AsterixRuntimeException;
-
-public interface ICharSequenceAccessor<T> {
-
-    /**
-     * Return the character in the wrapped char sequence at the given index.
-     * 
-     * @param index
-     * @return
-     */
-    public char getCharAt(int index) throws AsterixRuntimeException;
-
-    /**
-     * Get the length of the wrapped char sequence.
-     * 
-     * @return
-     */
-    public int getLength();
-
-}
diff --git a/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/temporal/StringCharSequenceAccessor.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/temporal/StringCharSequenceAccessor.java
deleted file mode 100644
index 17e483a..0000000
--- a/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/temporal/StringCharSequenceAccessor.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright 2009-2011 by The Regents of the University of California
- * Licensed 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 from
- * 
- *     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 edu.uci.ics.asterix.om.base.temporal;
-
-import edu.uci.ics.asterix.common.exceptions.AsterixRuntimeException;
-
-public class StringCharSequenceAccessor implements ICharSequenceAccessor<String> {
-
-    private String string;
-    private int offset;
-    private int length;
-
-    @Override
-    public char getCharAt(int index) throws AsterixRuntimeException {
-        if (index >= length) {
-            throw new AsterixRuntimeException("String accessor is out of bound.");
-        }
-        return string.charAt(index + offset);
-    }
-
-    public void reset(String obj, int offset, int len) {
-        this.string = obj;
-        this.offset = offset;
-        this.length = len;
-    }
-
-    @Override
-    public int getLength() {
-        return length;
-    }
-
-}
diff --git a/asterix-om/src/main/java/edu/uci/ics/asterix/om/functions/AsterixBuiltinFunctions.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/functions/AsterixBuiltinFunctions.java
index a547737..e8a9719 100644
--- a/asterix-om/src/main/java/edu/uci/ics/asterix/om/functions/AsterixBuiltinFunctions.java
+++ b/asterix-om/src/main/java/edu/uci/ics/asterix/om/functions/AsterixBuiltinFunctions.java
@@ -448,7 +448,7 @@
     public static final FunctionIdentifier ACCESSOR_TEMPORAL_YEAR = new FunctionIdentifier(
             FunctionConstants.ASTERIX_NS, "year", 1);
     public static final FunctionIdentifier ACCESSOR_TEMPORAL_MONTH = new FunctionIdentifier(
-            FunctionConstants.ASTERIX_NS, "month", 2);
+            FunctionConstants.ASTERIX_NS, "month", 1);
     public static final FunctionIdentifier ACCESSOR_TEMPORAL_DAY = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
             "day", 1);
     public static final FunctionIdentifier ACCESSOR_TEMPORAL_HOUR = new FunctionIdentifier(
diff --git a/asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/printer/APrintVisitor.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/printer/APrintVisitor.java
index 3664804..b78308d 100644
--- a/asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/printer/APrintVisitor.java
+++ b/asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/printer/APrintVisitor.java
@@ -31,6 +31,7 @@
 import edu.uci.ics.asterix.dataflow.data.nontagged.printers.AInt32Printer;
 import edu.uci.ics.asterix.dataflow.data.nontagged.printers.AInt64Printer;
 import edu.uci.ics.asterix.dataflow.data.nontagged.printers.AInt8Printer;
+import edu.uci.ics.asterix.dataflow.data.nontagged.printers.AIntervalPrinter;
 import edu.uci.ics.asterix.dataflow.data.nontagged.printers.ALinePrinter;
 import edu.uci.ics.asterix.dataflow.data.nontagged.printers.ANullPrinter;
 import edu.uci.ics.asterix.dataflow.data.nontagged.printers.APoint3DPrinter;
@@ -173,6 +174,10 @@
                     AStringPrinter.INSTANCE.print(b, s, l, ps);
                     break;
                 }
+                case INTERVAL: {
+                    AIntervalPrinter.INSTANCE.print(b, s, l, ps);
+                    break;
+                }
                 default: {
                     throw new NotImplementedException("No printer for type " + typeTag);
                 }
diff --git a/asterix-om/src/main/java/edu/uci/ics/asterix/om/types/ATypeTag.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/types/ATypeTag.java
index e69fbcd..a0ad3e1 100644
--- a/asterix-om/src/main/java/edu/uci/ics/asterix/om/types/ATypeTag.java
+++ b/asterix-om/src/main/java/edu/uci/ics/asterix/om/types/ATypeTag.java
@@ -42,9 +42,9 @@
     LINE(30),
     POLYGON(31),
     CIRCLE(32),
-    INTERVAL(34),
     RECTANGLE(33),
-    SYSTEM_NULL(34);
+    INTERVAL(34),
+    SYSTEM_NULL(35);
 
     private byte value;
 
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/comparisons/AbstractComparisonEvaluator.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/comparisons/AbstractComparisonEvaluator.java
index 2b4ea3a..1565cb9 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/comparisons/AbstractComparisonEvaluator.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/comparisons/AbstractComparisonEvaluator.java
@@ -136,7 +136,7 @@
     private ComparisonResult compareDateOrTimeWithArg(ATypeTag typeTag2) throws AlgebricksException {
         if (typeTag2 == ATypeTag.NULL) {
             return ComparisonResult.GREATER_THAN;
-        } else if (typeTag2 == ATypeTag.DATETIME) {
+        } else if (typeTag2 == ATypeTag.DATE || typeTag2 == ATypeTag.TIME) {
             int result = dateOrTimeBinaryComp.compare(outLeft.getByteArray(), 1, outLeft.getLength() - 1,
                     outRight.getByteArray(), 1, outRight.getLength() - 1);
             if (result == 0)
@@ -146,7 +146,7 @@
             else
                 return ComparisonResult.GREATER_THAN;
         }
-        throw new AlgebricksException("Comparison is undefined between types ADateTime and " + typeTag2 + " .");
+        throw new AlgebricksException("Comparison is undefined between types Date/Time and " + typeTag2 + " .");
     }
 
     private ComparisonResult compareDateTimeWithArg(ATypeTag typeTag2) throws AlgebricksException {
@@ -162,7 +162,7 @@
             else
                 return ComparisonResult.GREATER_THAN;
         }
-        throw new AlgebricksException("Comparison is undefined between types ADateTime and " + typeTag2 + " .");
+        throw new AlgebricksException("Comparison is undefined between types Datetime and " + typeTag2 + " .");
     }
 
     private ComparisonResult compareBooleanWithArg(ATypeTag typeTag2) throws AlgebricksException {
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ADateConstructorDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ADateConstructorDescriptor.java
index 44fcf7c..a1f9911 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ADateConstructorDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ADateConstructorDescriptor.java
@@ -22,7 +22,6 @@
 import edu.uci.ics.asterix.om.base.AMutableDate;
 import edu.uci.ics.asterix.om.base.ANull;
 import edu.uci.ics.asterix.om.base.temporal.ADateParserFactory;
-import edu.uci.ics.asterix.om.base.temporal.ByteArrayCharSequenceAccessor;
 import edu.uci.ics.asterix.om.base.temporal.GregorianCalendarSystem;
 import edu.uci.ics.asterix.om.functions.AsterixBuiltinFunctions;
 import edu.uci.ics.asterix.om.functions.IFunctionDescriptor;
@@ -73,8 +72,6 @@
                     private ISerializerDeserializer<ANull> nullSerde = AqlSerializerDeserializerProvider.INSTANCE
                             .getSerializerDeserializer(BuiltinType.ANULL);
 
-                    private ByteArrayCharSequenceAccessor charAccessor = new ByteArrayCharSequenceAccessor();
-
                     @Override
                     public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
 
@@ -86,8 +83,17 @@
 
                                 int stringLength = (serString[1] & 0xff << 8) + (serString[2] & 0xff << 0);
 
-                                charAccessor.reset(serString, 3, stringLength);
-                                long chrononTimeInMs = ADateParserFactory.parseDatePart(charAccessor, true);
+                                int startOffset = 3;
+                                while (serString[startOffset] == ' ') {
+                                    startOffset++;
+                                }
+                                int endOffset = stringLength - 1 + 3;
+                                while (serString[endOffset] == ' ') {
+                                    endOffset--;
+                                }
+
+                                long chrononTimeInMs = ADateParserFactory.parseDatePart(serString, startOffset,
+                                        endOffset - startOffset + 1);
 
                                 short temp = 0;
                                 if (chrononTimeInMs < 0
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ADateTimeConstructorDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ADateTimeConstructorDescriptor.java
index 6a5783b..83f4c8b 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ADateTimeConstructorDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ADateTimeConstructorDescriptor.java
@@ -23,7 +23,6 @@
 import edu.uci.ics.asterix.om.base.ANull;
 import edu.uci.ics.asterix.om.base.temporal.ADateParserFactory;
 import edu.uci.ics.asterix.om.base.temporal.ATimeParserFactory;
-import edu.uci.ics.asterix.om.base.temporal.ByteArrayCharSequenceAccessor;
 import edu.uci.ics.asterix.om.functions.AsterixBuiltinFunctions;
 import edu.uci.ics.asterix.om.functions.IFunctionDescriptor;
 import edu.uci.ics.asterix.om.functions.IFunctionDescriptorFactory;
@@ -72,7 +71,6 @@
                     @SuppressWarnings("unchecked")
                     private ISerializerDeserializer<ANull> nullSerde = AqlSerializerDeserializerProvider.INSTANCE
                             .getSerializerDeserializer(BuiltinType.ANULL);
-                    private ByteArrayCharSequenceAccessor charAccessor = new ByteArrayCharSequenceAccessor();
 
                     @Override
                     public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
@@ -85,25 +83,22 @@
 
                                 int stringLength = (serString[1] & 0xff << 8) + (serString[2] & 0xff << 0);
 
-                                charAccessor.reset(serString, 3, stringLength);
-
                                 // +1 if it is negative (-)
-                                short timeOffset = (short) ((charAccessor.getCharAt(0) == '-') ? 1 : 0);
+                                short timeOffset = (short) ((serString[3] == '-') ? 1 : 0);
 
-                                if (charAccessor.getCharAt(timeOffset + 10) != 'T'
-                                        && charAccessor.getCharAt(timeOffset + 8) != 'T') {
-                                    throw new AlgebricksException(errorMessage + ": missing T");
+                                timeOffset += 8;
+
+                                if (serString[3 + timeOffset] != 'T') {
+                                    timeOffset += 2;
+                                    if (serString[3 + timeOffset] != 'T') {
+                                        throw new AlgebricksException(errorMessage + ": missing T");
+                                    }
                                 }
 
-                                // if extended form 11, else 9
-                                timeOffset += (charAccessor.getCharAt(timeOffset + 13) == ':') ? (short) (11)
-                                        : (short) (9);
+                                long chrononTimeInMs = ADateParserFactory.parseDatePart(serString, 3, timeOffset);
 
-                                long chrononTimeInMs = ADateParserFactory.parseDatePart(charAccessor, false);
-
-                                charAccessor.reset(serString, 3 + timeOffset, stringLength - timeOffset);
-
-                                chrononTimeInMs += ATimeParserFactory.parseTimePart(charAccessor);
+                                chrononTimeInMs += ATimeParserFactory.parseTimePart(serString, 3 + timeOffset + 1,
+                                        stringLength - timeOffset - 1);
 
                                 aDateTime.setValue(chrononTimeInMs);
                                 datetimeSerde.serialize(aDateTime, out);
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ADurationConstructorDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ADurationConstructorDescriptor.java
index b2b3f4e..a84ae1d 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ADurationConstructorDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ADurationConstructorDescriptor.java
@@ -21,7 +21,6 @@
 import edu.uci.ics.asterix.om.base.AMutableDuration;
 import edu.uci.ics.asterix.om.base.ANull;
 import edu.uci.ics.asterix.om.base.temporal.ADurationParserFactory;
-import edu.uci.ics.asterix.om.base.temporal.ByteArrayCharSequenceAccessor;
 import edu.uci.ics.asterix.om.functions.AsterixBuiltinFunctions;
 import edu.uci.ics.asterix.om.functions.IFunctionDescriptor;
 import edu.uci.ics.asterix.om.functions.IFunctionDescriptorFactory;
@@ -43,8 +42,6 @@
     private final static byte SER_STRING_TYPE_TAG = ATypeTag.STRING.serialize();
     private final static byte SER_NULL_TYPE_TAG = ATypeTag.NULL.serialize();
 
-    private final static ByteArrayCharSequenceAccessor charAccessor = new ByteArrayCharSequenceAccessor();
-
     public static final IFunctionDescriptorFactory FACTORY = new IFunctionDescriptorFactory() {
         public IFunctionDescriptor createFunctionDescriptor() {
             return new ADurationConstructorDescriptor();
@@ -85,9 +82,7 @@
 
                                 int stringLength = (serString[1] & 0xff << 8) + (serString[2] & 0xff << 0);
 
-                                charAccessor.reset(serString, 3, stringLength);
-
-                                ADurationParserFactory.parseDuration(charAccessor, aDuration);
+                                ADurationParserFactory.parseDuration(serString, 3, stringLength, aDuration);
 
                                 durationSerde.serialize(aDuration, out);
                             } else if (serString[0] == SER_NULL_TYPE_TAG) {
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AIntervalFromDateConstructorDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AIntervalFromDateConstructorDescriptor.java
index e1a12f8..0414874 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AIntervalFromDateConstructorDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AIntervalFromDateConstructorDescriptor.java
@@ -23,7 +23,6 @@
 import edu.uci.ics.asterix.om.base.AMutableInterval;
 import edu.uci.ics.asterix.om.base.ANull;
 import edu.uci.ics.asterix.om.base.temporal.ADateParserFactory;
-import edu.uci.ics.asterix.om.base.temporal.ByteArrayCharSequenceAccessor;
 import edu.uci.ics.asterix.om.base.temporal.GregorianCalendarSystem;
 import edu.uci.ics.asterix.om.functions.IFunctionDescriptor;
 import edu.uci.ics.asterix.om.functions.IFunctionDescriptorFactory;
@@ -78,8 +77,6 @@
                     private ISerializerDeserializer<ANull> nullSerde = AqlSerializerDeserializerProvider.INSTANCE
                             .getSerializerDeserializer(BuiltinType.ANULL);
 
-                    private ByteArrayCharSequenceAccessor charAccessor = new ByteArrayCharSequenceAccessor();
-
                     @Override
                     public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
 
@@ -100,17 +97,15 @@
                                         + (argOut0.getByteArray()[2] & 0xff << 0);
 
                                 // start date
-                                charAccessor.reset(argOut0.getByteArray(), 3, stringLength);
-                                long intervalStart = ADateParserFactory.parseDatePart(charAccessor, true)
-                                        / GregorianCalendarSystem.CHRONON_OF_DAY;
-                                // end date
+                                long intervalStart = ADateParserFactory.parseDatePart(argOut0.getByteArray(), 3,
+                                        stringLength) / GregorianCalendarSystem.CHRONON_OF_DAY;
 
+                                // end date
                                 stringLength = (argOut1.getByteArray()[1] & 0xff << 8)
                                         + (argOut1.getByteArray()[2] & 0xff << 0);
 
-                                charAccessor.reset(argOut1.getByteArray(), 3, stringLength);
-                                long intervalEnd = ADateParserFactory.parseDatePart(charAccessor, true)
-                                        / GregorianCalendarSystem.CHRONON_OF_DAY;
+                                long intervalEnd = ADateParserFactory.parseDatePart(argOut1.getByteArray(), 3,
+                                        stringLength) / GregorianCalendarSystem.CHRONON_OF_DAY;
 
                                 if (intervalEnd < intervalStart) {
                                     throw new AlgebricksException(
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AIntervalFromDateTimeConstructorDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AIntervalFromDateTimeConstructorDescriptor.java
index 72a8e37..6b3e2b6 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AIntervalFromDateTimeConstructorDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AIntervalFromDateTimeConstructorDescriptor.java
@@ -24,7 +24,6 @@
 import edu.uci.ics.asterix.om.base.ANull;
 import edu.uci.ics.asterix.om.base.temporal.ADateParserFactory;
 import edu.uci.ics.asterix.om.base.temporal.ATimeParserFactory;
-import edu.uci.ics.asterix.om.base.temporal.ByteArrayCharSequenceAccessor;
 import edu.uci.ics.asterix.om.functions.IFunctionDescriptor;
 import edu.uci.ics.asterix.om.functions.IFunctionDescriptorFactory;
 import edu.uci.ics.asterix.om.types.ATypeTag;
@@ -78,8 +77,6 @@
                     private ISerializerDeserializer<ANull> nullSerde = AqlSerializerDeserializerProvider.INSTANCE
                             .getSerializerDeserializer(BuiltinType.ANULL);
 
-                    private ByteArrayCharSequenceAccessor charAccessor = new ByteArrayCharSequenceAccessor();
-
                     @Override
                     public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
 
@@ -95,47 +92,43 @@
                                 nullSerde.serialize(ANull.NULL, out);
                             } else if (argOut0.getByteArray()[0] == SER_STRING_TYPE_TAG
                                     && argOut1.getByteArray()[0] == SER_STRING_TYPE_TAG) {
-                                // start date
-
+                                // start datetime
                                 int stringLength = (argOut0.getByteArray()[1] & 0xff << 8)
                                         + (argOut0.getByteArray()[2] & 0xff << 0);
 
-                                charAccessor.reset(argOut0.getByteArray(), 3, stringLength);
                                 // get offset for time part: +1 if it is negative (-)
-                                short timeOffset = (short) ((charAccessor.getCharAt(0) == '-') ? 1 : 0);
-
-                                if (charAccessor.getCharAt(timeOffset + 10) != 'T'
-                                        && charAccessor.getCharAt(timeOffset + 8) != 'T') {
-                                    throw new AlgebricksException(errorMessage + ": missing T");
+                                short timeOffset = (short) ((argOut0.getByteArray()[3] == '-') ? 1 : 0);
+                                timeOffset += 8;
+                                if (argOut0.getByteArray()[3 + timeOffset] != 'T') {
+                                    timeOffset += 2;
+                                    if (argOut0.getByteArray()[3 + timeOffset] != 'T') {
+                                        throw new AlgebricksException(errorMessage + ": missing T");
+                                    }
                                 }
 
-                                // if extended form 11, else 9
-                                timeOffset += (charAccessor.getCharAt(timeOffset + 13) == ':') ? (short) (11)
-                                        : (short) (9);
-                                long intervalStart = ADateParserFactory.parseDatePart(charAccessor, false);
-                                charAccessor.reset(argOut0.getByteArray(), 3 + timeOffset, stringLength - timeOffset);
-                                intervalStart += ATimeParserFactory.parseTimePart(charAccessor);
+                                long intervalStart = ADateParserFactory.parseDatePart(argOut0.getByteArray(), 3,
+                                        timeOffset);
+                                intervalStart += ATimeParserFactory.parseTimePart(argOut0.getByteArray(),
+                                        3 + timeOffset + 1, stringLength - timeOffset - 1);
 
-                                // end date
-
+                                // end datetime
                                 stringLength = (argOut1.getByteArray()[1] & 0xff << 8)
                                         + (argOut1.getByteArray()[2] & 0xff << 0);
 
-                                charAccessor.reset(argOut1.getByteArray(), 3, stringLength);
                                 // get offset for time part: +1 if it is negative (-)
-                                timeOffset = (short) ((charAccessor.getCharAt(0) == '-') ? 1 : 0);
-
-                                if (charAccessor.getCharAt(timeOffset + 10) != 'T'
-                                        && charAccessor.getCharAt(timeOffset + 8) != 'T') {
-                                    throw new AlgebricksException(errorMessage + ": missing T");
+                                timeOffset = (short) ((argOut1.getByteArray()[3] == '-') ? 1 : 0);
+                                timeOffset += 8;
+                                if (argOut1.getByteArray()[3 + timeOffset] != 'T') {
+                                    timeOffset += 2;
+                                    if (argOut1.getByteArray()[3 + timeOffset] != 'T') {
+                                        throw new AlgebricksException(errorMessage + ": missing T");
+                                    }
                                 }
 
-                                // if extended form 11, else 9
-                                timeOffset += (charAccessor.getCharAt(timeOffset + 13) == ':') ? (short) (11)
-                                        : (short) (9);
-                                long intervalEnd = ADateParserFactory.parseDatePart(charAccessor, false);
-                                charAccessor.reset(argOut1.getByteArray(), 3 + timeOffset, stringLength - timeOffset);
-                                intervalEnd += ATimeParserFactory.parseTimePart(charAccessor);
+                                long intervalEnd = ADateParserFactory.parseDatePart(argOut1.getByteArray(), 3,
+                                        timeOffset);
+                                intervalEnd += ATimeParserFactory.parseTimePart(argOut1.getByteArray(),
+                                        3 + timeOffset + 1, stringLength - timeOffset - 1);
 
                                 if (intervalEnd < intervalStart) {
                                     throw new AlgebricksException(
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AIntervalFromTimeConstructorDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AIntervalFromTimeConstructorDescriptor.java
index 3ce722a..042a33b 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AIntervalFromTimeConstructorDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AIntervalFromTimeConstructorDescriptor.java
@@ -23,7 +23,6 @@
 import edu.uci.ics.asterix.om.base.AMutableInterval;
 import edu.uci.ics.asterix.om.base.ANull;
 import edu.uci.ics.asterix.om.base.temporal.ATimeParserFactory;
-import edu.uci.ics.asterix.om.base.temporal.ByteArrayCharSequenceAccessor;
 import edu.uci.ics.asterix.om.base.temporal.GregorianCalendarSystem;
 import edu.uci.ics.asterix.om.functions.IFunctionDescriptor;
 import edu.uci.ics.asterix.om.functions.IFunctionDescriptorFactory;
@@ -78,8 +77,6 @@
                     private ISerializerDeserializer<ANull> nullSerde = AqlSerializerDeserializerProvider.INSTANCE
                             .getSerializerDeserializer(BuiltinType.ANULL);
 
-                    private ByteArrayCharSequenceAccessor charAccessor = new ByteArrayCharSequenceAccessor();
-
                     @Override
                     public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
 
@@ -96,23 +93,21 @@
                             } else if (argOut0.getByteArray()[0] == SER_STRING_TYPE_TAG
                                     && argOut1.getByteArray()[0] == SER_STRING_TYPE_TAG) {
                                 // start date
-
                                 int stringLength = (argOut0.getByteArray()[1] & 0xff << 8)
                                         + (argOut0.getByteArray()[2] & 0xff << 0);
 
-                                charAccessor.reset(argOut0.getByteArray(), 3, stringLength);
-                                long intervalStart = ATimeParserFactory.parseTimePart(charAccessor);
+                                long intervalStart = ATimeParserFactory.parseTimePart(argOut0.getByteArray(), 3,
+                                        stringLength);
                                 if (intervalStart < 0) {
                                     intervalStart += GregorianCalendarSystem.CHRONON_OF_DAY;
                                 }
 
                                 // end date
-
                                 stringLength = (argOut1.getByteArray()[1] & 0xff << 8)
                                         + (argOut1.getByteArray()[2] & 0xff << 0);
 
-                                charAccessor.reset(argOut1.getByteArray(), 3, stringLength);
-                                long intervalEnd = ATimeParserFactory.parseTimePart(charAccessor);
+                                long intervalEnd = ATimeParserFactory.parseTimePart(argOut1.getByteArray(), 3,
+                                        stringLength);
                                 if (intervalEnd < 0) {
                                     intervalEnd += GregorianCalendarSystem.CHRONON_OF_DAY;
                                 }
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AIntervalStartFromDateConstructorDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AIntervalStartFromDateConstructorDescriptor.java
index 23fdb07..d5a0db9 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AIntervalStartFromDateConstructorDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AIntervalStartFromDateConstructorDescriptor.java
@@ -25,7 +25,6 @@
 import edu.uci.ics.asterix.om.base.ANull;
 import edu.uci.ics.asterix.om.base.temporal.ADateParserFactory;
 import edu.uci.ics.asterix.om.base.temporal.ADurationParserFactory;
-import edu.uci.ics.asterix.om.base.temporal.ByteArrayCharSequenceAccessor;
 import edu.uci.ics.asterix.om.base.temporal.DurationArithmeticOperations;
 import edu.uci.ics.asterix.om.base.temporal.GregorianCalendarSystem;
 import edu.uci.ics.asterix.om.functions.IFunctionDescriptor;
@@ -82,8 +81,6 @@
                     private ISerializerDeserializer<ANull> nullSerde = AqlSerializerDeserializerProvider.INSTANCE
                             .getSerializerDeserializer(BuiltinType.ANULL);
 
-                    private ByteArrayCharSequenceAccessor charAccessor = new ByteArrayCharSequenceAccessor();
-
                     @Override
                     public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
 
@@ -99,20 +96,20 @@
                                 nullSerde.serialize(ANull.NULL, out);
                             } else if (argOut0.getByteArray()[0] == SER_STRING_TYPE_TAG
                                     && argOut1.getByteArray()[0] == SER_STRING_TYPE_TAG) {
-                                // start date
 
+                                // start date
                                 int stringLength = (argOut0.getByteArray()[1] & 0xff << 8)
                                         + (argOut0.getByteArray()[2] & 0xff << 0);
 
-                                charAccessor.reset(argOut0.getByteArray(), 3, stringLength);
-                                long intervalStart = ADateParserFactory.parseDatePart(charAccessor, true);
-                                // duration
+                                long intervalStart = ADateParserFactory.parseDatePart(argOut0.getByteArray(), 3,
+                                        stringLength);
 
+                                // duration
                                 stringLength = (argOut1.getByteArray()[1] & 0xff << 8)
                                         + (argOut1.getByteArray()[2] & 0xff << 0);
 
-                                charAccessor.reset(argOut1.getByteArray(), 3, stringLength);
-                                ADurationParserFactory.parseDuration(charAccessor, aDuration);
+                                ADurationParserFactory
+                                        .parseDuration(argOut1.getByteArray(), 3, stringLength, aDuration);
 
                                 long intervalEnd = DurationArithmeticOperations.addDuration(intervalStart,
                                         aDuration.getMonths(), aDuration.getMilliseconds());
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AIntervalStartFromDateTimeConstructorDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AIntervalStartFromDateTimeConstructorDescriptor.java
index 91c45df..d821fc3 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AIntervalStartFromDateTimeConstructorDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AIntervalStartFromDateTimeConstructorDescriptor.java
@@ -26,7 +26,6 @@
 import edu.uci.ics.asterix.om.base.temporal.ADateParserFactory;
 import edu.uci.ics.asterix.om.base.temporal.ADurationParserFactory;
 import edu.uci.ics.asterix.om.base.temporal.ATimeParserFactory;
-import edu.uci.ics.asterix.om.base.temporal.ByteArrayCharSequenceAccessor;
 import edu.uci.ics.asterix.om.base.temporal.DurationArithmeticOperations;
 import edu.uci.ics.asterix.om.functions.IFunctionDescriptor;
 import edu.uci.ics.asterix.om.functions.IFunctionDescriptorFactory;
@@ -82,8 +81,6 @@
                     private ISerializerDeserializer<ANull> nullSerde = AqlSerializerDeserializerProvider.INSTANCE
                             .getSerializerDeserializer(BuiltinType.ANULL);
 
-                    private ByteArrayCharSequenceAccessor charAccessor = new ByteArrayCharSequenceAccessor();
-
                     @Override
                     public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
 
@@ -104,29 +101,29 @@
                                 int stringLength = (argOut0.getByteArray()[1] & 0xff << 8)
                                         + (argOut0.getByteArray()[2] & 0xff << 0);
 
-                                charAccessor.reset(argOut0.getByteArray(), 3, stringLength);
                                 // get offset for time part: +1 if it is negative (-)
-                                short timeOffset = (short) ((charAccessor.getCharAt(0) == '-') ? 1 : 0);
+                                short timeOffset = (short) ((argOut0.getByteArray()[3] == '-') ? 1 : 0);
 
-                                if (charAccessor.getCharAt(timeOffset + 10) != 'T'
-                                        && charAccessor.getCharAt(timeOffset + 8) != 'T') {
-                                    throw new AlgebricksException(errorMessage + ": missing T");
+                                timeOffset += 8;
+
+                                if (argOut0.getByteArray()[3 + timeOffset] != 'T') {
+                                    timeOffset += 2;
+                                    if (argOut0.getByteArray()[3 + timeOffset] != 'T') {
+                                        throw new AlgebricksException(errorMessage + ": missing T");
+                                    }
                                 }
 
-                                // if extended form 11, else 9
-                                timeOffset += (charAccessor.getCharAt(timeOffset + 13) == ':') ? (short) (11)
-                                        : (short) (9);
-                                long intervalStart = ADateParserFactory.parseDatePart(charAccessor, false);
-                                charAccessor.reset(argOut0.getByteArray(), 3 + timeOffset, stringLength - timeOffset);
-                                intervalStart += ATimeParserFactory.parseTimePart(charAccessor);
+                                long intervalStart = ADateParserFactory.parseDatePart(argOut0.getByteArray(), 3,
+                                        timeOffset);
+                                intervalStart += ATimeParserFactory.parseTimePart(argOut0.getByteArray(),
+                                        3 + timeOffset + 1, stringLength - timeOffset - 1);
 
                                 // duration
-
                                 stringLength = (argOut1.getByteArray()[1] & 0xff << 8)
                                         + (argOut1.getByteArray()[2] & 0xff << 0);
 
-                                charAccessor.reset(argOut1.getByteArray(), 3, stringLength);
-                                ADurationParserFactory.parseDuration(charAccessor, aDuration);
+                                ADurationParserFactory
+                                        .parseDuration(argOut1.getByteArray(), 3, stringLength, aDuration);
 
                                 long intervalEnd = DurationArithmeticOperations.addDuration(intervalStart,
                                         aDuration.getMonths(), aDuration.getMilliseconds());
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AIntervalStartFromTimeConstructorDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AIntervalStartFromTimeConstructorDescriptor.java
index e576fef..8135598 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AIntervalStartFromTimeConstructorDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AIntervalStartFromTimeConstructorDescriptor.java
@@ -25,7 +25,6 @@
 import edu.uci.ics.asterix.om.base.ANull;
 import edu.uci.ics.asterix.om.base.temporal.ADurationParserFactory;
 import edu.uci.ics.asterix.om.base.temporal.ATimeParserFactory;
-import edu.uci.ics.asterix.om.base.temporal.ByteArrayCharSequenceAccessor;
 import edu.uci.ics.asterix.om.base.temporal.DurationArithmeticOperations;
 import edu.uci.ics.asterix.om.base.temporal.GregorianCalendarSystem;
 import edu.uci.ics.asterix.om.functions.IFunctionDescriptor;
@@ -82,8 +81,6 @@
                     private ISerializerDeserializer<ANull> nullSerde = AqlSerializerDeserializerProvider.INSTANCE
                             .getSerializerDeserializer(BuiltinType.ANULL);
 
-                    private ByteArrayCharSequenceAccessor charAccessor = new ByteArrayCharSequenceAccessor();
-
                     @Override
                     public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
 
@@ -104,8 +101,8 @@
                                 int stringLength = (argOut0.getByteArray()[1] & 0xff << 8)
                                         + (argOut0.getByteArray()[2] & 0xff << 0);
 
-                                charAccessor.reset(argOut0.getByteArray(), 3, stringLength);
-                                int intervalStart = ATimeParserFactory.parseTimePart(charAccessor);
+                                int intervalStart = ATimeParserFactory.parseTimePart(argOut0.getByteArray(), 3,
+                                        stringLength);
 
                                 if (intervalStart < 0) {
                                     intervalStart += GregorianCalendarSystem.CHRONON_OF_DAY;
@@ -116,8 +113,8 @@
                                 stringLength = (argOut1.getByteArray()[1] & 0xff << 8)
                                         + (argOut1.getByteArray()[2] & 0xff << 0);
 
-                                charAccessor.reset(argOut1.getByteArray(), 3, stringLength);
-                                ADurationParserFactory.parseDuration(charAccessor, aDuration);
+                                ADurationParserFactory
+                                        .parseDuration(argOut1.getByteArray(), 3, stringLength, aDuration);
 
                                 if (aDuration.getMonths() != 0) {
                                     throw new AlgebricksException("Cannot add a year-month duration to a time value.");
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ATimeConstructorDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ATimeConstructorDescriptor.java
index caff78b..f2ad400 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ATimeConstructorDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ATimeConstructorDescriptor.java
@@ -22,7 +22,6 @@
 import edu.uci.ics.asterix.om.base.ANull;
 import edu.uci.ics.asterix.om.base.ATime;
 import edu.uci.ics.asterix.om.base.temporal.ATimeParserFactory;
-import edu.uci.ics.asterix.om.base.temporal.ByteArrayCharSequenceAccessor;
 import edu.uci.ics.asterix.om.base.temporal.GregorianCalendarSystem;
 import edu.uci.ics.asterix.om.functions.AsterixBuiltinFunctions;
 import edu.uci.ics.asterix.om.functions.IFunctionDescriptor;
@@ -73,8 +72,6 @@
                     private ISerializerDeserializer<ANull> nullSerde = AqlSerializerDeserializerProvider.INSTANCE
                             .getSerializerDeserializer(BuiltinType.ANULL);
 
-                    private ByteArrayCharSequenceAccessor charAccessor = new ByteArrayCharSequenceAccessor();
-
                     @Override
                     public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
 
@@ -86,8 +83,7 @@
 
                                 int stringLength = (serString[1] & 0xff << 8) + (serString[2] & 0xff << 0);
 
-                                charAccessor.reset(serString, 3, stringLength);
-                                int chrononTimeInMs = ATimeParserFactory.parseTimePart(charAccessor);
+                                int chrononTimeInMs = ATimeParserFactory.parseTimePart(serString, 3, stringLength);
 
                                 if (chrononTimeInMs < 0) {
                                     chrononTimeInMs += GregorianCalendarSystem.CHRONON_OF_DAY;
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CodePointToStringDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CodePointToStringDescriptor.java
index 5dcb838..55fe563 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CodePointToStringDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CodePointToStringDescriptor.java
@@ -93,9 +93,6 @@
                     private ICopyEvaluatorFactory listEvalFactory = args[0];
                     private ArrayBackedValueStorage outInputList = new ArrayBackedValueStorage();
                     private ICopyEvaluator evalList = listEvalFactory.createEvaluator(outInputList);
-                    @SuppressWarnings("unchecked")
-                    private ISerializerDeserializer<ANull> nullSerde = AqlSerializerDeserializerProvider.INSTANCE
-                            .getSerializerDeserializer(BuiltinType.ANULL);
 
                     @Override
                     public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
@@ -103,10 +100,6 @@
                             outInputList.reset();
                             evalList.evaluate(tuple);
                             byte[] serOrderedList = outInputList.getByteArray();
-                            if (serOrderedList[0] == SER_NULL_TYPE_TAG) {
-                                nullSerde.serialize(ANull.NULL, out);
-                                return;
-                            }
                             if (serOrderedList[0] != SER_ORDEREDLIST_TYPE_TAG) {
                                 throw new AlgebricksException("Expects an Integer List."
                                         + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(serOrderedList[0]));
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NumericRoundHalfToEven2Descriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NumericRoundHalfToEven2Descriptor.java
index 06cf69a..e205bf5 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NumericRoundHalfToEven2Descriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NumericRoundHalfToEven2Descriptor.java
@@ -98,13 +98,10 @@
                             return (int) AInt32SerializerDeserializer.getInt(argOut.getByteArray(), 1);
                         } else if (argOut.getByteArray()[0] == serInt64TypeTag) {
                             return (int) AInt64SerializerDeserializer.getLong(argOut.getByteArray(), 1);
-                        } else if (argOut.getByteArray()[0] == serFloatTypeTag) {
-                            return (int) AFloatSerializerDeserializer.getFloat(argOut.getByteArray(), 1);
-                        } else if (argOut.getByteArray()[0] == serDoubleTypeTag) {
-                            return (int) ADoubleSerializerDeserializer.getDouble(argOut.getByteArray(), 1);
+                        } else {
+                            throw new AlgebricksException(
+                                    "The precision argument for round-half-to-even should be an integer.");
                         }
-
-                        return 0;
                     }
 
                     @SuppressWarnings("unchecked")
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/StringConcatDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/StringConcatDescriptor.java
index f975579..f53ebe8 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/StringConcatDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/StringConcatDescriptor.java
@@ -4,7 +4,6 @@
 import java.io.IOException;
 
 import edu.uci.ics.asterix.common.exceptions.AsterixException;
-import edu.uci.ics.asterix.common.functions.FunctionConstants;
 import edu.uci.ics.asterix.formats.nontagged.AqlSerializerDeserializerProvider;
 import edu.uci.ics.asterix.om.base.ANull;
 import edu.uci.ics.asterix.om.functions.AsterixBuiltinFunctions;
@@ -67,10 +66,6 @@
                             } catch (AsterixException e) {
                                 throw new AlgebricksException(e);
                             }
-                            if (listAccessor.getItemType() == ATypeTag.NULL) {
-                                nullSerde.serialize(ANull.NULL, out);
-                                return;
-                            }
                             try {
                                 // calculate length first
                                 int utf8Len = 0;
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/StringJoinDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/StringJoinDescriptor.java
index c379c3e3..67334ce 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/StringJoinDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/StringJoinDescriptor.java
@@ -5,20 +5,16 @@
 
 import edu.uci.ics.asterix.common.exceptions.AsterixException;
 import edu.uci.ics.asterix.dataflow.data.nontagged.serde.AOrderedListSerializerDeserializer;
-import edu.uci.ics.asterix.formats.nontagged.AqlSerializerDeserializerProvider;
-import edu.uci.ics.asterix.om.base.ANull;
 import edu.uci.ics.asterix.om.functions.AsterixBuiltinFunctions;
 import edu.uci.ics.asterix.om.functions.IFunctionDescriptor;
 import edu.uci.ics.asterix.om.functions.IFunctionDescriptorFactory;
 import edu.uci.ics.asterix.om.types.ATypeTag;
-import edu.uci.ics.asterix.om.types.BuiltinType;
 import edu.uci.ics.asterix.om.types.EnumDeserializer;
 import edu.uci.ics.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicDescriptor;
 import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
 import edu.uci.ics.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
 import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluator;
 import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
-import edu.uci.ics.hyracks.api.dataflow.value.ISerializerDeserializer;
 import edu.uci.ics.hyracks.data.std.api.IDataOutputProvider;
 import edu.uci.ics.hyracks.data.std.primitive.UTF8StringPointable;
 import edu.uci.ics.hyracks.data.std.util.ArrayBackedValueStorage;
@@ -37,7 +33,6 @@
         }
     };
     private final static byte SER_STRING_TYPE_TAG = ATypeTag.STRING.serialize();
-    private final static byte SER_NULL_TYPE_TAG = ATypeTag.NULL.serialize();
     private final static byte SER_ORDEREDLIST_TYPE_TAG = ATypeTag.ORDEREDLIST.serialize();
     private final byte stringTypeTag = ATypeTag.STRING.serialize();
 
@@ -58,9 +53,6 @@
                     private ArrayBackedValueStorage outInputSep = new ArrayBackedValueStorage();
                     private ICopyEvaluator evalList = listEvalFactory.createEvaluator(outInputList);
                     private ICopyEvaluator evalSep = sepEvalFactory.createEvaluator(outInputSep);
-                    @SuppressWarnings("unchecked")
-                    private ISerializerDeserializer<ANull> nullSerde = AqlSerializerDeserializerProvider.INSTANCE
-                            .getSerializerDeserializer(BuiltinType.ANULL);
 
                     @Override
                     public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
@@ -72,20 +64,14 @@
                             outInputSep.reset();
                             evalSep.evaluate(tuple);
                             byte[] serSep = outInputSep.getByteArray();
-                            if (serOrderedList[0] == SER_NULL_TYPE_TAG) {
-                                nullSerde.serialize(ANull.NULL, out);
-                                return;
-                            }
                             if (serOrderedList[0] != SER_ORDEREDLIST_TYPE_TAG) {
-                                throw new AlgebricksException("Expects String List."
+                                throw new AlgebricksException("Expects String List but got "
                                         + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(serOrderedList[0]));
                             }
 
-                            if (serSep[0] == SER_NULL_TYPE_TAG) {
-                            }
                             if (serSep[0] != SER_STRING_TYPE_TAG) {
-                                throw new AlgebricksException("Expects String as Seperator."
-                                        + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(serOrderedList[0]));
+                                throw new AlgebricksException("Expects String as Seperator but got "
+                                        + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(serSep[0]));
                             }
 
                             int size = AOrderedListSerializerDeserializer.getNumberOfItems(serOrderedList);
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/StringToCodePointDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/StringToCodePointDescriptor.java
index fdd45e2..3d845e1 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/StringToCodePointDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/StringToCodePointDescriptor.java
@@ -7,7 +7,6 @@
 import edu.uci.ics.asterix.formats.nontagged.AqlSerializerDeserializerProvider;
 import edu.uci.ics.asterix.om.base.AInt32;
 import edu.uci.ics.asterix.om.base.AMutableInt32;
-import edu.uci.ics.asterix.om.base.ANull;
 import edu.uci.ics.asterix.om.functions.AsterixBuiltinFunctions;
 import edu.uci.ics.asterix.om.functions.IFunctionDescriptor;
 import edu.uci.ics.asterix.om.functions.IFunctionDescriptorFactory;
@@ -43,7 +42,6 @@
         }
     };
     private final static byte SER_STRING_TYPE_TAG = ATypeTag.STRING.serialize();
-    private final static byte SER_NULL_TYPE_TAG = ATypeTag.NULL.serialize();
 
     @Override
     public ICopyEvaluatorFactory createEvaluatorFactory(final ICopyEvaluatorFactory[] args) {
@@ -62,9 +60,6 @@
                     private ArrayBackedValueStorage inputVal = new ArrayBackedValueStorage();
 
                     @SuppressWarnings("unchecked")
-                    private ISerializerDeserializer<ANull> nullSerde = AqlSerializerDeserializerProvider.INSTANCE
-                            .getSerializerDeserializer(BuiltinType.ANULL);
-                    @SuppressWarnings("unchecked")
                     private final ISerializerDeserializer<AInt32> int32Serde = AqlSerializerDeserializerProvider.INSTANCE
                             .getSerializerDeserializer(BuiltinType.AINT32);
                     private final AMutableInt32 aInt32 = new AMutableInt32(0);
@@ -123,9 +118,7 @@
 
                                 }
                                 listBuilder.write(out, true);
-                            } else if (serString[0] == SER_NULL_TYPE_TAG)
-                                nullSerde.serialize(ANull.NULL, out);
-                            else
+                            } else
                                 throw new AlgebricksException("Expects String Type.");
                         } catch (IOException e1) {
                             throw new AlgebricksException(e1.getMessage());
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/AdjustDateTimeForTimeZoneDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/AdjustDateTimeForTimeZoneDescriptor.java
index fb01e97..21d098a 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/AdjustDateTimeForTimeZoneDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/AdjustDateTimeForTimeZoneDescriptor.java
@@ -21,7 +21,6 @@
 import edu.uci.ics.asterix.formats.nontagged.AqlSerializerDeserializerProvider;
 import edu.uci.ics.asterix.om.base.ANull;
 import edu.uci.ics.asterix.om.base.temporal.ATimeParserFactory;
-import edu.uci.ics.asterix.om.base.temporal.ByteArrayCharSequenceAccessor;
 import edu.uci.ics.asterix.om.base.temporal.GregorianCalendarSystem;
 import edu.uci.ics.asterix.om.base.temporal.GregorianCalendarSystem.Fields;
 import edu.uci.ics.asterix.om.functions.IFunctionDescriptor;
@@ -81,8 +80,6 @@
                     private ISerializerDeserializer<ANull> nullSerde = AqlSerializerDeserializerProvider.INSTANCE
                             .getSerializerDeserializer(BuiltinType.ANULL);
 
-                    private ByteArrayCharSequenceAccessor charAccessor = new ByteArrayCharSequenceAccessor();
-
                     private GregorianCalendarSystem calInstance = GregorianCalendarSystem.getInstance();
 
                     @Override
@@ -111,12 +108,7 @@
                                                 + argOut1.getByteArray()[0]);
                             }
 
-                            int stringLength = (argOut1.getByteArray()[1] & 0xff << 8)
-                                    + (argOut1.getByteArray()[2] & 0xff << 0);
-
-                            charAccessor.reset(argOut1.getByteArray(), 3, stringLength);
-
-                            int timezone = ATimeParserFactory.parseTimezonePart(charAccessor, 0);
+                            int timezone = ATimeParserFactory.parseTimezonePart(argOut1.getByteArray(), 3);
 
                             if (!calInstance.validateTimeZone(timezone)) {
                                 throw new AlgebricksException("Wrong format for a time zone string!");
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/AdjustTimeForTimeZoneDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/AdjustTimeForTimeZoneDescriptor.java
index 1323664..1f8842e 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/AdjustTimeForTimeZoneDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/AdjustTimeForTimeZoneDescriptor.java
@@ -21,7 +21,6 @@
 import edu.uci.ics.asterix.formats.nontagged.AqlSerializerDeserializerProvider;
 import edu.uci.ics.asterix.om.base.ANull;
 import edu.uci.ics.asterix.om.base.temporal.ATimeParserFactory;
-import edu.uci.ics.asterix.om.base.temporal.ByteArrayCharSequenceAccessor;
 import edu.uci.ics.asterix.om.base.temporal.GregorianCalendarSystem;
 import edu.uci.ics.asterix.om.base.temporal.GregorianCalendarSystem.Fields;
 import edu.uci.ics.asterix.om.functions.IFunctionDescriptor;
@@ -81,8 +80,6 @@
                     private ISerializerDeserializer<ANull> nullSerde = AqlSerializerDeserializerProvider.INSTANCE
                             .getSerializerDeserializer(BuiltinType.ANULL);
 
-                    private ByteArrayCharSequenceAccessor charAccessor = new ByteArrayCharSequenceAccessor();
-
                     private GregorianCalendarSystem calInstance = GregorianCalendarSystem.getInstance();
 
                     @Override
@@ -111,12 +108,7 @@
                                                 + argOut1.getByteArray()[0]);
                             }
 
-                            int stringLength = (argOut0.getByteArray()[1] & 0xff << 8)
-                                    + (argOut0.getByteArray()[2] & 0xff << 0);
-
-                            charAccessor.reset(argOut1.getByteArray(), 3, stringLength);
-
-                            int timezone = ATimeParserFactory.parseTimezonePart(charAccessor, 0);
+                            int timezone = ATimeParserFactory.parseTimezonePart(argOut1.getByteArray(), 3);
 
                             if (!calInstance.validateTimeZone(timezone)) {
                                 throw new AlgebricksException("Wrong format for a time zone string!");
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/CalendarDuartionFromDateDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/CalendarDuartionFromDateDescriptor.java
index c6be030..cbd600f 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/CalendarDuartionFromDateDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/CalendarDuartionFromDateDescriptor.java
@@ -186,9 +186,9 @@
                                 }
 
                                 if (day < 0) {
-                                    boolean isLeapYear = calInstanct.isLeapYear(year0);
-                                    day += (isLeapYear) ? (GregorianCalendarSystem.DAYS_OF_MONTH_LEAP[month0 - 1])
-                                            : (GregorianCalendarSystem.DAYS_OF_MONTH_ORDI[month0 - 1]);
+                                    boolean isLeapYear = calInstanct.isLeapYear(year1);
+                                    day += (isLeapYear) ? (GregorianCalendarSystem.DAYS_OF_MONTH_LEAP[month1 - 2])
+                                            : (GregorianCalendarSystem.DAYS_OF_MONTH_ORDI[month1 - 2]);
                                     month -= 1;
                                 }
 
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/CalendarDurationFromDateTimeDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/CalendarDurationFromDateTimeDescriptor.java
index 2c7a9a7..8df3c7f 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/CalendarDurationFromDateTimeDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/CalendarDurationFromDateTimeDescriptor.java
@@ -124,13 +124,13 @@
 
                             if (argOut0.getByteArray()[0] != SER_DATETIME_TYPE_TAG) {
                                 throw new AlgebricksException(
-                                        "Inapplicable input type for parameter 0: expecting ADateTime, but got: "
+                                        "Inapplicable input type for parameter 0: expecting Datetime, but got: "
                                                 + argOut0.getByteArray()[0]);
                             }
 
                             if (argOut1.getByteArray()[0] != SER_DURATION_TYPE_TAG) {
                                 throw new AlgebricksException(
-                                        "Inapplicable input type for parameter 1: expecting ADateTime, but got: "
+                                        "Inapplicable input type for parameter 1: expecting Duration, but got: "
                                                 + argOut1.getByteArray()[0]);
                             }
 
@@ -202,9 +202,9 @@
                                 }
 
                                 if (day < 0) {
-                                    boolean isLeapYear = calInstanct.isLeapYear(year0);
-                                    day += (isLeapYear) ? (GregorianCalendarSystem.DAYS_OF_MONTH_LEAP[month0 - 1])
-                                            : (GregorianCalendarSystem.DAYS_OF_MONTH_ORDI[month0 - 1]);
+                                    boolean isLeapYear = calInstanct.isLeapYear(year1);
+                                    day += (isLeapYear) ? (GregorianCalendarSystem.DAYS_OF_MONTH_LEAP[month1 - 2])
+                                            : (GregorianCalendarSystem.DAYS_OF_MONTH_ORDI[month1 - 2]);
                                     month -= 1;
                                 }
 
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/operators/file/ADMDataParser.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/operators/file/ADMDataParser.java
index 2e64ad4..b32110b 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/operators/file/ADMDataParser.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/operators/file/ADMDataParser.java
@@ -234,7 +234,7 @@
                 try {
                     if (checkType(ATypeTag.INTERVAL, objectType, out)) {
                         if (admLexer.next() == AdmLexer.TOKEN_CONSTRUCTOR_OPEN) {
-                            if (admLexer.next() == AdmLexer.TOKEN_STRING_CONS) {
+                            if (admLexer.next() == AdmLexer.TOKEN_STRING_LITERAL) {
                                 AIntervalSerializerDeserializer.parseDate(admLexer.getLastTokenImage(), out);
 
                                 if (admLexer.next() == AdmLexer.TOKEN_CONSTRUCTOR_CLOSE) {
@@ -252,7 +252,7 @@
                 try {
                     if (checkType(ATypeTag.INTERVAL, objectType, out)) {
                         if (admLexer.next() == AdmLexer.TOKEN_CONSTRUCTOR_OPEN) {
-                            if (admLexer.next() == AdmLexer.TOKEN_STRING_CONS) {
+                            if (admLexer.next() == AdmLexer.TOKEN_STRING_LITERAL) {
                                 AIntervalSerializerDeserializer.parseTime(admLexer.getLastTokenImage(), out);
 
                                 if (admLexer.next() == AdmLexer.TOKEN_CONSTRUCTOR_CLOSE) {
@@ -270,7 +270,7 @@
                 try {
                     if (checkType(ATypeTag.INTERVAL, objectType, out)) {
                         if (admLexer.next() == AdmLexer.TOKEN_CONSTRUCTOR_OPEN) {
-                            if (admLexer.next() == AdmLexer.TOKEN_STRING_CONS) {
+                            if (admLexer.next() == AdmLexer.TOKEN_STRING_LITERAL) {
                                 AIntervalSerializerDeserializer.parseDatetime(admLexer.getLastTokenImage(), out);
 
                                 if (admLexer.next() == AdmLexer.TOKEN_CONSTRUCTOR_CLOSE) {
diff --git a/asterix-runtime/src/main/resources/adm.grammar b/asterix-runtime/src/main/resources/adm.grammar
index 56c7212..4d4158f 100644
--- a/asterix-runtime/src/main/resources/adm.grammar
+++ b/asterix-runtime/src/main/resources/adm.grammar
@@ -26,9 +26,9 @@
 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_TIME_CONS      = string(interval-time)
+INTERVAL_DATE_CONS      = string(interval-date)
+INTERVAL_DATETIME_CONS  = string(interval-datetime)
 
 NULL_LITERAL   = string(null)
 TRUE_LITERAL   = string(true)