added code to enable temporal instance key on date, time, datetime, year-month-duration and day-time-duration; metadata test should be double checked as it cannot pass now
diff --git a/asterix-app/src/test/resources/metadata/queries/basic/issue_363_temporal_key_0/issue_363_temporal_key_0.1.ddl.aql b/asterix-app/src/test/resources/metadata/queries/basic/issue_363_temporal_key_0/issue_363_temporal_key_0.1.ddl.aql
new file mode 100644
index 0000000..8a82439
--- /dev/null
+++ b/asterix-app/src/test/resources/metadata/queries/basic/issue_363_temporal_key_0/issue_363_temporal_key_0.1.ddl.aql
@@ -0,0 +1,17 @@
+/*
+ * Description : create a dataset providing hints but use whitespace
+ * Expected Res : Success
+ * Date : 29 Jan 2013
+ * Issue : 251
+ */
+
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+create type Emp as open {
+id:year-month-duration,
+name:string
+}
+
+create dataset Employee(Emp) primary key id;
diff --git a/asterix-app/src/test/resources/metadata/queries/basic/issue_363_temporal_key_0/issue_363_temporal_key_0.2.update.aql b/asterix-app/src/test/resources/metadata/queries/basic/issue_363_temporal_key_0/issue_363_temporal_key_0.2.update.aql
new file mode 100644
index 0000000..ea77da4
--- /dev/null
+++ b/asterix-app/src/test/resources/metadata/queries/basic/issue_363_temporal_key_0/issue_363_temporal_key_0.2.update.aql
@@ -0,0 +1,12 @@
+/*
+ * Description : create a dataset providing hints but use whitespace
+ * Expected Res : Success
+ * Date : 29 Jan 2013
+ * Issue : 251
+ */
+
+use dataverse test;
+
+insert into dataset Employee({"id":datetime("1900-01-01T00:00:00"), "name": "John"})
+insert into dataset Employee({"id":datetime("2000-01-01T00:00:00"), "name": "Alex"})
+insert into dataset Employee({"id":datetime("2013-01-01T00:00:00"), "name": "Bob"})
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/metadata/queries/basic/issue_363_temporal_key_0/issue_363_temporal_key_0.3.query.aql b/asterix-app/src/test/resources/metadata/queries/basic/issue_363_temporal_key_0/issue_363_temporal_key_0.3.query.aql
new file mode 100644
index 0000000..b8a7827
--- /dev/null
+++ b/asterix-app/src/test/resources/metadata/queries/basic/issue_363_temporal_key_0/issue_363_temporal_key_0.3.query.aql
@@ -0,0 +1,10 @@
+/*
+ * Description : create a dataset providing hints but use whitespace
+ * Expected Res : Success
+ * Date : 29 Jan 2013
+ * Issue : 251
+ */
+
+for $x in dataset('Metadata.Dataset')
+where $x.DataverseName='test'
+return $x
diff --git a/asterix-app/src/test/resources/metadata/results/basic/issue_363_temporal_key_0/issue363_temporal_key_0.1.adm b/asterix-app/src/test/resources/metadata/results/basic/issue_363_temporal_key_0/issue363_temporal_key_0.1.adm
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/asterix-app/src/test/resources/metadata/results/basic/issue_363_temporal_key_0/issue363_temporal_key_0.1.adm
diff --git a/asterix-app/src/test/resources/metadata/testsuite.xml b/asterix-app/src/test/resources/metadata/testsuite.xml
index 47bcafa..6a69ca1 100644
--- a/asterix-app/src/test/resources/metadata/testsuite.xml
+++ b/asterix-app/src/test/resources/metadata/testsuite.xml
@@ -150,6 +150,11 @@
<output-dir compare="Text">issue_251_dataset_hint_4</output-dir>
</compilation-unit>
</test-case>
+ <test-case FilePath="basic">
+ <compilation-unit name="issue_363_temporal_key_0">
+ <output-dir compare="Text">issue_363_temporal_key_0</output-dir>
+ </compilation-unit>
+ </test-case>
</test-group>
<test-group name="exception">
<test-case FilePath="exception">
diff --git a/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entities/AsterixBuiltinTypeMap.java b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entities/AsterixBuiltinTypeMap.java
index 27cf542..aa8f452 100644
--- a/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entities/AsterixBuiltinTypeMap.java
+++ b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entities/AsterixBuiltinTypeMap.java
@@ -40,6 +40,8 @@
_builtinTypeMap.put("time", BuiltinType.ATIME);
_builtinTypeMap.put("datetime", BuiltinType.ADATETIME);
_builtinTypeMap.put("duration", BuiltinType.ADURATION);
+ _builtinTypeMap.put("year-month-duration", BuiltinType.AYEARMONTHDURATION);
+ _builtinTypeMap.put("day-time-duration", BuiltinType.ADAYTIMEDURATION);
_builtinTypeMap.put("interval", BuiltinType.AINTERVAL);
_builtinTypeMap.put("point", BuiltinType.APOINT);
_builtinTypeMap.put("point3d", BuiltinType.APOINT3D);
diff --git a/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/comparators/AObjectAscBinaryComparatorFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/comparators/AObjectAscBinaryComparatorFactory.java
index 0e486e7..c00a0e1 100644
--- a/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/comparators/AObjectAscBinaryComparatorFactory.java
+++ b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/comparators/AObjectAscBinaryComparatorFactory.java
@@ -58,9 +58,11 @@
case BOOLEAN: {
return ascBoolComp.compare(b1, s1 + 1, l1 - 1, b2, s2 + 1, l2 - 1);
}
+ case YEARMONTHDURATION:
case INT32: {
return ascIntComp.compare(b1, s1 + 1, l1 - 1, b2, s2 + 1, l2 - 1);
}
+ case DAYTIMEDURATION:
case INT64: {
return ascLongComp.compare(b1, s1 + 1, l1 - 1, b2, s2 + 1, l2 - 1);
}
diff --git a/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/hash/AObjectBinaryHashFunctionFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/hash/AObjectBinaryHashFunctionFactory.java
index 15fd8c8..570d8ae 100644
--- a/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/hash/AObjectBinaryHashFunctionFactory.java
+++ b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/hash/AObjectBinaryHashFunctionFactory.java
@@ -44,9 +44,14 @@
case BOOLEAN: {
return boolHash.hash(bytes, offset + 1, length - 1);
}
+ case TIME:
+ case DATE:
+ case YEARMONTHDURATION:
case INT32: {
return intHash.hash(bytes, offset + 1, length - 1);
}
+ case DATETIME:
+ case DAYTIMEDURATION:
case INT64: {
return longHash.hash(bytes, offset + 1, length - 1);
}
diff --git a/asterix-om/src/main/java/edu/uci/ics/asterix/formats/nontagged/AqlBinaryComparatorFactoryProvider.java b/asterix-om/src/main/java/edu/uci/ics/asterix/formats/nontagged/AqlBinaryComparatorFactoryProvider.java
index 02f0e47..a9ef041 100644
--- a/asterix-om/src/main/java/edu/uci/ics/asterix/formats/nontagged/AqlBinaryComparatorFactoryProvider.java
+++ b/asterix-om/src/main/java/edu/uci/ics/asterix/formats/nontagged/AqlBinaryComparatorFactoryProvider.java
@@ -102,9 +102,11 @@
case INT16: {
return addOffset(SHORT_POINTABLE_INSTANCE, ascending);
}
+ case YEARMONTHDURATION:
case INT32: {
return addOffset(INTEGER_POINTABLE_INSTANCE, ascending);
}
+ case DAYTIMEDURATION:
case INT64: {
return addOffset(LONG_POINTABLE_INSTANCE, ascending);
}
diff --git a/asterix-om/src/main/java/edu/uci/ics/asterix/formats/nontagged/AqlBinaryHashFunctionFactoryProvider.java b/asterix-om/src/main/java/edu/uci/ics/asterix/formats/nontagged/AqlBinaryHashFunctionFactoryProvider.java
index 1afdbf8..cbc4745 100644
--- a/asterix-om/src/main/java/edu/uci/ics/asterix/formats/nontagged/AqlBinaryHashFunctionFactoryProvider.java
+++ b/asterix-om/src/main/java/edu/uci/ics/asterix/formats/nontagged/AqlBinaryHashFunctionFactoryProvider.java
@@ -69,9 +69,14 @@
case BOOLEAN: {
return addOffset(BooleanBinaryHashFunctionFactory.INSTANCE);
}
+ case DATE:
+ case TIME:
+ case YEARMONTHDURATION:
case INT32: {
return addOffset(new PointableBinaryHashFunctionFactory(IntegerPointable.FACTORY));
}
+ case DAYTIMEDURATION:
+ case DATETIME:
case INT64: {
return addOffset(LongBinaryHashFunctionFactory.INSTANCE);
}
diff --git a/asterix-om/src/main/java/edu/uci/ics/asterix/om/types/ARecordType.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/types/ARecordType.java
index ca7bc24..037cd29 100644
--- a/asterix-om/src/main/java/edu/uci/ics/asterix/om/types/ARecordType.java
+++ b/asterix-om/src/main/java/edu/uci/ics/asterix/om/types/ARecordType.java
@@ -259,6 +259,11 @@
case FLOAT:
case DOUBLE:
case STRING:
+ case DATE:
+ case TIME:
+ case DATETIME:
+ case YEARMONTHDURATION:
+ case DAYTIMEDURATION:
break;
case UNION:
throw new AlgebricksException("The partitioning key \"" + fieldName + "\" cannot be nullable");