Merge commit '3a62802' from 'gerrit/mad-hatter'

Change-Id: Ia70a791f6d9fd05854017ef7692adc14a6a5f37f
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/TypeTranslator.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/TypeTranslator.java
index fd434f4..aa00fb3 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/TypeTranslator.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/TypeTranslator.java
@@ -41,6 +41,7 @@
 import org.apache.asterix.metadata.entities.BuiltinTypeMap;
 import org.apache.asterix.metadata.entities.Datatype;
 import org.apache.asterix.metadata.utils.MetadataConstants;
+import org.apache.asterix.metadata.utils.TypeUtil;
 import org.apache.asterix.om.types.AOrderedListType;
 import org.apache.asterix.om.types.ARecordType;
 import org.apache.asterix.om.types.AUnionType;
@@ -322,48 +323,33 @@
 
         for (int j = 0; j < n; j++) {
             TypeExpression texpr = rtd.getFieldTypes().get(j);
+            IAType type;
             switch (texpr.getTypeKind()) {
                 case TYPEREFERENCE: {
                     TypeReferenceExpression tre = (TypeReferenceExpression) texpr;
                     TypeSignature signature = createTypeSignature(tre, defaultDataverse);
-                    IAType tref = solveTypeReference(signature, typeMap);
-                    if (tref != null) {
-                        if (!rtd.getOptionableFields().get(j)) { // not nullable
-                            fldTypes[j] = tref;
-                        } else { // optional
-                            fldTypes[j] = AUnionType.createUnknownableType(tref);
-                        }
-                    } else {
+                    type = solveTypeReference(signature, typeMap);
+                    if (type == null) {
                         addIncompleteFieldTypeReference(recType, j, tre, incompleteFieldTypes);
-                        if (rtd.getOptionableFields().get(j)) {
-                            fldTypes[j] = AUnionType.createUnknownableType(null);
-                        }
                     }
                     break;
                 }
                 case RECORD: {
                     RecordTypeDefinition recTypeDef2 = (RecordTypeDefinition) texpr;
-                    IAType t2 = computeRecordType(null, recTypeDef2, typeMap, incompleteFieldTypes, incompleteItemTypes,
+                    type = computeRecordType(null, recTypeDef2, typeMap, incompleteFieldTypes, incompleteItemTypes,
                             defaultDataverse);
-                    if (!rtd.getOptionableFields().get(j)) { // not nullable
-                        fldTypes[j] = t2;
-                    } else { // nullable
-                        fldTypes[j] = AUnionType.createUnknownableType(t2);
-                    }
                     break;
                 }
                 case ORDEREDLIST: {
                     OrderedListTypeDefinition oltd = (OrderedListTypeDefinition) texpr;
-                    IAType t2 = computeOrderedListType(null, oltd, typeMap, incompleteItemTypes, incompleteFieldTypes,
+                    type = computeOrderedListType(null, oltd, typeMap, incompleteItemTypes, incompleteFieldTypes,
                             defaultDataverse);
-                    fldTypes[j] = rtd.getOptionableFields().get(j) ? AUnionType.createUnknownableType(t2) : t2;
                     break;
                 }
                 case UNORDEREDLIST: {
                     UnorderedListTypeDefinition ultd = (UnorderedListTypeDefinition) texpr;
-                    IAType t2 = computeUnorderedListType(null, ultd, typeMap, incompleteItemTypes, incompleteFieldTypes,
+                    type = computeUnorderedListType(null, ultd, typeMap, incompleteItemTypes, incompleteFieldTypes,
                             defaultDataverse);
-                    fldTypes[j] = rtd.getOptionableFields().get(j) ? AUnionType.createUnknownableType(t2) : t2;
                     break;
                 }
                 default: {
@@ -371,6 +357,9 @@
                 }
             }
 
+            Boolean nullable = rtd.getNullableFields().get(j);
+            Boolean missable = rtd.getMissableFields().get(j);
+            fldTypes[j] = TypeUtil.createQuantifiedType(type, nullable, missable);
         }
 
         return recType;
diff --git a/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta03/builtin_type/meta03_builtin_type.1.adm b/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta03/builtin_type/meta03_builtin_type.1.adm
index 9427035..63db00f 100644
--- a/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta03/builtin_type/meta03_builtin_type.1.adm
+++ b/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta03/builtin_type/meta03_builtin_type.1.adm
@@ -1 +1 @@
-{ "DataverseName": "testdv", "DatatypeName": "testtype", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": false, "Fields": [ { "FieldName": "id", "FieldType": "int32", "IsNullable": false } ] } }, "Timestamp": "Mon Sep 17 23:18:30 PDT 2012" }
+{ "DataverseName": "testdv", "DatatypeName": "testtype", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": false, "Fields": [ { "FieldName": "id", "FieldType": "int32", "IsNullable": false, "IsMissable": false } ] } }, "Timestamp": "Mon Sep 17 23:18:30 PDT 2012" }
diff --git a/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta03/builtin_type_nullable/meta03_builtin_type_nullable.1.adm b/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta03/builtin_type_nullable/meta03_builtin_type_nullable.1.adm
index 2abeba4..97efb63 100644
--- a/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta03/builtin_type_nullable/meta03_builtin_type_nullable.1.adm
+++ b/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta03/builtin_type_nullable/meta03_builtin_type_nullable.1.adm
@@ -1 +1 @@
-{ "DataverseName": "testdv", "DatatypeName": "testtype", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": false, "Fields": [ { "FieldName": "id", "FieldType": "int32", "IsNullable": true } ] } }, "Timestamp": "Mon Sep 17 23:18:30 PDT 2012" }
+{ "DataverseName": "testdv", "DatatypeName": "testtype", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": false, "Fields": [ { "FieldName": "id", "FieldType": "int32", "IsNullable": true, "IsMissable": true } ] } }, "Timestamp": "Mon Sep 17 23:18:30 PDT 2012" }
diff --git a/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta03/complex_type/ordered_list/meta03_ordered_list.1.adm b/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta03/complex_type/ordered_list/meta03_ordered_list.1.adm
index 25d210d..66558fd 100644
--- a/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta03/complex_type/ordered_list/meta03_ordered_list.1.adm
+++ b/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta03/complex_type/ordered_list/meta03_ordered_list.1.adm
@@ -1 +1 @@
-{ "DataverseName": "testdv", "DatatypeName": "testtype", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": false, "Fields": [ { "FieldName": "id", "FieldType": "int32", "IsNullable": false }, { "FieldName": "list", "FieldType": "testtype_list", "IsNullable": false } ] } }, "Timestamp": "Thu Feb 15 19:45:50 PST 2018" }
+{ "DataverseName": "testdv", "DatatypeName": "testtype", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": false, "Fields": [ { "FieldName": "id", "FieldType": "int32", "IsNullable": false, "IsMissable": false }, { "FieldName": "list", "FieldType": "testtype_list", "IsNullable": false, "IsMissable": false } ] } }, "Timestamp": "Thu Feb 15 19:45:50 PST 2018" }
diff --git a/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta03/complex_type/ordered_list_nullable/meta03_ordered_list_nullable.1.adm b/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta03/complex_type/ordered_list_nullable/meta03_ordered_list_nullable.1.adm
index 0ee413e..e6afb76 100644
--- a/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta03/complex_type/ordered_list_nullable/meta03_ordered_list_nullable.1.adm
+++ b/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta03/complex_type/ordered_list_nullable/meta03_ordered_list_nullable.1.adm
@@ -1 +1 @@
-{ "DataverseName": "testdv", "DatatypeName": "testtype", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": false, "Fields": [ { "FieldName": "id", "FieldType": "int32", "IsNullable": false }, { "FieldName": "list", "FieldType": "testtype_list", "IsNullable": true } ] } }, "Timestamp": "Thu Feb 15 19:45:50 PST 2018" }
+{ "DataverseName": "testdv", "DatatypeName": "testtype", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": false, "Fields": [ { "FieldName": "id", "FieldType": "int32", "IsNullable": false, "IsMissable": false }, { "FieldName": "list", "FieldType": "testtype_list", "IsNullable": true, "IsMissable": true } ] } }, "Timestamp": "Thu Feb 15 19:45:50 PST 2018" }
diff --git a/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta03/complex_type/record/meta03_record.1.adm b/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta03/complex_type/record/meta03_record.1.adm
index feb010d..831d735 100644
--- a/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta03/complex_type/record/meta03_record.1.adm
+++ b/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta03/complex_type/record/meta03_record.1.adm
@@ -1 +1 @@
-{ "DataverseName": "testdv", "DatatypeName": "testtype", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": false, "Fields": [ { "FieldName": "id", "FieldType": "int32", "IsNullable": false }, { "FieldName": "subtype", "FieldType": "testtype_subtype", "IsNullable": false } ] } }, "Timestamp": "Thu Feb 15 19:45:50 PST 2018" }
+{ "DataverseName": "testdv", "DatatypeName": "testtype", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": false, "Fields": [ { "FieldName": "id", "FieldType": "int32", "IsNullable": false, "IsMissable": false }, { "FieldName": "subtype", "FieldType": "testtype_subtype", "IsNullable": false, "IsMissable": false } ] } }, "Timestamp": "Thu Feb 15 19:45:50 PST 2018" }
diff --git a/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta03/complex_type/record_nullable/meta03_record_nullable.1.adm b/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta03/complex_type/record_nullable/meta03_record_nullable.1.adm
index eb19c4e..4479d4c 100644
--- a/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta03/complex_type/record_nullable/meta03_record_nullable.1.adm
+++ b/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta03/complex_type/record_nullable/meta03_record_nullable.1.adm
@@ -1 +1 @@
-{ "DataverseName": "testdv", "DatatypeName": "testtype", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": false, "Fields": [ { "FieldName": "id", "FieldType": "int32", "IsNullable": false }, { "FieldName": "subtype", "FieldType": "testtype_subtype", "IsNullable": true } ] } }, "Timestamp": "Thu Feb 15 19:45:50 PST 2018" }
+{ "DataverseName": "testdv", "DatatypeName": "testtype", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": false, "Fields": [ { "FieldName": "id", "FieldType": "int32", "IsNullable": false, "IsMissable": false }, { "FieldName": "subtype", "FieldType": "testtype_subtype", "IsNullable": true, "IsMissable": true } ] } }, "Timestamp": "Thu Feb 15 19:45:50 PST 2018" }
diff --git a/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta03/complex_type/unordered_list/meta03_unordered_list.1.adm b/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta03/complex_type/unordered_list/meta03_unordered_list.1.adm
index 25d210d..66558fd 100644
--- a/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta03/complex_type/unordered_list/meta03_unordered_list.1.adm
+++ b/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta03/complex_type/unordered_list/meta03_unordered_list.1.adm
@@ -1 +1 @@
-{ "DataverseName": "testdv", "DatatypeName": "testtype", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": false, "Fields": [ { "FieldName": "id", "FieldType": "int32", "IsNullable": false }, { "FieldName": "list", "FieldType": "testtype_list", "IsNullable": false } ] } }, "Timestamp": "Thu Feb 15 19:45:50 PST 2018" }
+{ "DataverseName": "testdv", "DatatypeName": "testtype", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": false, "Fields": [ { "FieldName": "id", "FieldType": "int32", "IsNullable": false, "IsMissable": false }, { "FieldName": "list", "FieldType": "testtype_list", "IsNullable": false, "IsMissable": false } ] } }, "Timestamp": "Thu Feb 15 19:45:50 PST 2018" }
diff --git a/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta03/complex_type/unordered_list_nullable/meta03_unordered_list_nullable.1.adm b/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta03/complex_type/unordered_list_nullable/meta03_unordered_list_nullable.1.adm
index 0ee413e..e6afb76 100644
--- a/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta03/complex_type/unordered_list_nullable/meta03_unordered_list_nullable.1.adm
+++ b/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta03/complex_type/unordered_list_nullable/meta03_unordered_list_nullable.1.adm
@@ -1 +1 @@
-{ "DataverseName": "testdv", "DatatypeName": "testtype", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": false, "Fields": [ { "FieldName": "id", "FieldType": "int32", "IsNullable": false }, { "FieldName": "list", "FieldType": "testtype_list", "IsNullable": true } ] } }, "Timestamp": "Thu Feb 15 19:45:50 PST 2018" }
+{ "DataverseName": "testdv", "DatatypeName": "testtype", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": false, "Fields": [ { "FieldName": "id", "FieldType": "int32", "IsNullable": false, "IsMissable": false }, { "FieldName": "list", "FieldType": "testtype_list", "IsNullable": true, "IsMissable": true } ] } }, "Timestamp": "Thu Feb 15 19:45:50 PST 2018" }
diff --git a/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta04/builtin_type/meta04_builtin_type.1.adm b/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta04/builtin_type/meta04_builtin_type.1.adm
index b28b3c8..0cf1897 100644
--- a/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta04/builtin_type/meta04_builtin_type.1.adm
+++ b/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta04/builtin_type/meta04_builtin_type.1.adm
@@ -1 +1 @@
-{ "DataverseName": "testdv", "DatatypeName": "testtype", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "id", "FieldType": "int32", "IsNullable": false } ] } }, "Timestamp": "Thu Feb 15 19:45:50 PST 2018" }
+{ "DataverseName": "testdv", "DatatypeName": "testtype", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "id", "FieldType": "int32", "IsNullable": false, "IsMissable": false } ] } }, "Timestamp": "Thu Feb 15 19:45:50 PST 2018" }
diff --git a/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta04/builtin_type_nullable/meta04_builtin_type_nullable.1.adm b/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta04/builtin_type_nullable/meta04_builtin_type_nullable.1.adm
index e67cbd4..4428bc0 100644
--- a/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta04/builtin_type_nullable/meta04_builtin_type_nullable.1.adm
+++ b/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta04/builtin_type_nullable/meta04_builtin_type_nullable.1.adm
@@ -1 +1 @@
-{ "DataverseName": "testdv", "DatatypeName": "testtype", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "id", "FieldType": "int32", "IsNullable": true } ] } }, "Timestamp": "Thu Feb 15 19:45:50 PST 2018" }
+{ "DataverseName": "testdv", "DatatypeName": "testtype", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "id", "FieldType": "int32", "IsNullable": true, "IsMissable": true } ] } }, "Timestamp": "Thu Feb 15 19:45:50 PST 2018" }
diff --git a/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta04/complex_type/ordered_list/meta04_ordered_list.1.adm b/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta04/complex_type/ordered_list/meta04_ordered_list.1.adm
index 5c98d74..badf77f 100644
--- a/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta04/complex_type/ordered_list/meta04_ordered_list.1.adm
+++ b/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta04/complex_type/ordered_list/meta04_ordered_list.1.adm
@@ -1 +1 @@
-{ "DataverseName": "testdv", "DatatypeName": "testtype", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "id", "FieldType": "int32", "IsNullable": false }, { "FieldName": "list", "FieldType": "testtype_list", "IsNullable": false } ] } }, "Timestamp": "Thu Feb 15 19:45:51 PST 2018" }
+{ "DataverseName": "testdv", "DatatypeName": "testtype", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "id", "FieldType": "int32", "IsNullable": false, "IsMissable": false }, { "FieldName": "list", "FieldType": "testtype_list", "IsNullable": false, "IsMissable": false } ] } }, "Timestamp": "Thu Feb 15 19:45:51 PST 2018" }
diff --git a/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta04/complex_type/ordered_list_nullable/meta04_ordered_list_nullable.1.adm b/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta04/complex_type/ordered_list_nullable/meta04_ordered_list_nullable.1.adm
index 697f652..d13ba1d 100644
--- a/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta04/complex_type/ordered_list_nullable/meta04_ordered_list_nullable.1.adm
+++ b/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta04/complex_type/ordered_list_nullable/meta04_ordered_list_nullable.1.adm
@@ -1 +1 @@
-{ "DataverseName": "testdv", "DatatypeName": "testtype", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "id", "FieldType": "int32", "IsNullable": false }, { "FieldName": "list", "FieldType": "testtype_list", "IsNullable": true } ] } }, "Timestamp": "Thu Feb 15 19:45:51 PST 2018" }
+{ "DataverseName": "testdv", "DatatypeName": "testtype", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "id", "FieldType": "int32", "IsNullable": false, "IsMissable": false }, { "FieldName": "list", "FieldType": "testtype_list", "IsNullable": true, "IsMissable": true } ] } }, "Timestamp": "Thu Feb 15 19:45:51 PST 2018" }
diff --git a/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta04/complex_type/record/meta04_record.1.adm b/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta04/complex_type/record/meta04_record.1.adm
index 620976f..e73474e 100644
--- a/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta04/complex_type/record/meta04_record.1.adm
+++ b/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta04/complex_type/record/meta04_record.1.adm
@@ -1 +1 @@
-{ "DataverseName": "testdv", "DatatypeName": "testtype", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "id", "FieldType": "int32", "IsNullable": false }, { "FieldName": "subtype", "FieldType": "testtype_subtype", "IsNullable": false } ] } }, "Timestamp": "Thu Feb 15 19:45:51 PST 2018" }
+{ "DataverseName": "testdv", "DatatypeName": "testtype", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "id", "FieldType": "int32", "IsNullable": false, "IsMissable": false }, { "FieldName": "subtype", "FieldType": "testtype_subtype", "IsNullable": false, "IsMissable": false } ] } }, "Timestamp": "Thu Feb 15 19:45:51 PST 2018" }
diff --git a/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta04/complex_type/record_nullable/meta04_record_nullable.1.adm b/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta04/complex_type/record_nullable/meta04_record_nullable.1.adm
index e95590d..218f386 100644
--- a/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta04/complex_type/record_nullable/meta04_record_nullable.1.adm
+++ b/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta04/complex_type/record_nullable/meta04_record_nullable.1.adm
@@ -1 +1 @@
-{ "DataverseName": "testdv", "DatatypeName": "testtype", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "id", "FieldType": "int32", "IsNullable": false }, { "FieldName": "subtype", "FieldType": "testtype_subtype", "IsNullable": true } ] } }, "Timestamp": "Thu Feb 15 19:45:51 PST 2018" }
+{ "DataverseName": "testdv", "DatatypeName": "testtype", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "id", "FieldType": "int32", "IsNullable": false, "IsMissable": false }, { "FieldName": "subtype", "FieldType": "testtype_subtype", "IsNullable": true, "IsMissable": true } ] } }, "Timestamp": "Thu Feb 15 19:45:51 PST 2018" }
diff --git a/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta04/complex_type/unordered_list/meta04_unordered_list.1.adm b/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta04/complex_type/unordered_list/meta04_unordered_list.1.adm
index 5c98d74..badf77f 100644
--- a/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta04/complex_type/unordered_list/meta04_unordered_list.1.adm
+++ b/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta04/complex_type/unordered_list/meta04_unordered_list.1.adm
@@ -1 +1 @@
-{ "DataverseName": "testdv", "DatatypeName": "testtype", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "id", "FieldType": "int32", "IsNullable": false }, { "FieldName": "list", "FieldType": "testtype_list", "IsNullable": false } ] } }, "Timestamp": "Thu Feb 15 19:45:51 PST 2018" }
+{ "DataverseName": "testdv", "DatatypeName": "testtype", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "id", "FieldType": "int32", "IsNullable": false, "IsMissable": false }, { "FieldName": "list", "FieldType": "testtype_list", "IsNullable": false, "IsMissable": false } ] } }, "Timestamp": "Thu Feb 15 19:45:51 PST 2018" }
diff --git a/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta04/complex_type/unordered_list_nullable/meta04_unordered_list_nullable.1.adm b/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta04/complex_type/unordered_list_nullable/meta04_unordered_list_nullable.1.adm
index 697f652..d13ba1d 100644
--- a/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta04/complex_type/unordered_list_nullable/meta04_unordered_list_nullable.1.adm
+++ b/asterixdb/asterix-app/src/test/resources/metadata/results/basic/meta04/complex_type/unordered_list_nullable/meta04_unordered_list_nullable.1.adm
@@ -1 +1 @@
-{ "DataverseName": "testdv", "DatatypeName": "testtype", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "id", "FieldType": "int32", "IsNullable": false }, { "FieldName": "list", "FieldType": "testtype_list", "IsNullable": true } ] } }, "Timestamp": "Thu Feb 15 19:45:51 PST 2018" }
+{ "DataverseName": "testdv", "DatatypeName": "testtype", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "id", "FieldType": "int32", "IsNullable": false, "IsMissable": false }, { "FieldName": "list", "FieldType": "testtype_list", "IsNullable": true, "IsMissable": true } ] } }, "Timestamp": "Thu Feb 15 19:45:51 PST 2018" }
diff --git a/asterixdb/asterix-app/src/test/resources/metadata/results/basic/metadata_datatype/metadata_datatype.1.adm b/asterixdb/asterix-app/src/test/resources/metadata/results/basic/metadata_datatype/metadata_datatype.1.adm
index 1bd070e..9aa9269 100644
--- a/asterixdb/asterix-app/src/test/resources/metadata/results/basic/metadata_datatype/metadata_datatype.1.adm
+++ b/asterixdb/asterix-app/src/test/resources/metadata/results/basic/metadata_datatype/metadata_datatype.1.adm
@@ -1,71 +1,71 @@
-{ "DataverseName": "Metadata", "DatatypeName": "AnyObject", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": true, "Fields": [  ] } }, "Timestamp": "Wed Jan 29 19:18:03 PST 2020" }
-{ "DataverseName": "Metadata", "DatatypeName": "CompactionPolicyRecordType", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "DataverseName", "FieldType": "string", "IsNullable": false }, { "FieldName": "CompactionPolicy", "FieldType": "string", "IsNullable": false }, { "FieldName": "Classname", "FieldType": "string", "IsNullable": false } ] } }, "Timestamp": "Wed Jan 29 19:18:03 PST 2020" }
-{ "DataverseName": "Metadata", "DatatypeName": "DatasetRecordType", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "DataverseName", "FieldType": "string", "IsNullable": false }, { "FieldName": "DatasetName", "FieldType": "string", "IsNullable": false }, { "FieldName": "DatatypeDataverseName", "FieldType": "string", "IsNullable": false }, { "FieldName": "DatatypeName", "FieldType": "string", "IsNullable": false }, { "FieldName": "DatasetType", "FieldType": "string", "IsNullable": false }, { "FieldName": "GroupName", "FieldType": "string", "IsNullable": false }, { "FieldName": "CompactionPolicy", "FieldType": "string", "IsNullable": false }, { "FieldName": "CompactionPolicyProperties", "FieldType": "DatasetRecordType_CompactionPolicyProperties", "IsNullable": false }, { "FieldName": "InternalDetails", "FieldType": "DatasetRecordType_InternalDetails", "IsNullable": true }, { "FieldName": "ExternalDetails", "FieldType": "DatasetRecordType_ExternalDetails", "IsNullable": true }, { "FieldName": "Hints", "FieldType": "DatasetRecordType_Hints", "IsNullable": false }, { "FieldName": "Timestamp", "FieldType": "string", "IsNullable": false }, { "FieldName": "DatasetId", "FieldType": "int32", "IsNullable": false }, { "FieldName": "PendingOp", "FieldType": "int32", "IsNullable": false } ] } }, "Timestamp": "Wed Jan 29 19:18:03 PST 2020" }
-{ "DataverseName": "Metadata", "DatatypeName": "DatasetRecordType_CompactionPolicyProperties", "Derived": { "Tag": "ORDEREDLIST", "IsAnonymous": true, "OrderedList": "DatasetRecordType_CompactionPolicyProperties_Item" }, "Timestamp": "Wed Jan 29 19:18:03 PST 2020" }
-{ "DataverseName": "Metadata", "DatatypeName": "DatasetRecordType_CompactionPolicyProperties_Item", "Derived": { "Tag": "RECORD", "IsAnonymous": true, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "Name", "FieldType": "string", "IsNullable": false }, { "FieldName": "Value", "FieldType": "string", "IsNullable": false } ] } }, "Timestamp": "Wed Jan 29 19:18:03 PST 2020" }
-{ "DataverseName": "Metadata", "DatatypeName": "DatasetRecordType_ExternalDetails", "Derived": { "Tag": "RECORD", "IsAnonymous": true, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "DatasourceAdapter", "FieldType": "string", "IsNullable": false }, { "FieldName": "Properties", "FieldType": "DatasetRecordType_ExternalDetails_Properties", "IsNullable": false }, { "FieldName": "LastRefreshTime", "FieldType": "datetime", "IsNullable": false }, { "FieldName": "TransactionState", "FieldType": "int32", "IsNullable": false } ] } }, "Timestamp": "Wed Jan 29 19:18:03 PST 2020" }
-{ "DataverseName": "Metadata", "DatatypeName": "DatasetRecordType_ExternalDetails_Properties", "Derived": { "Tag": "ORDEREDLIST", "IsAnonymous": true, "OrderedList": "DatasetRecordType_ExternalDetails_Properties_Item" }, "Timestamp": "Wed Jan 29 19:18:03 PST 2020" }
-{ "DataverseName": "Metadata", "DatatypeName": "DatasetRecordType_ExternalDetails_Properties_Item", "Derived": { "Tag": "RECORD", "IsAnonymous": true, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "Name", "FieldType": "string", "IsNullable": false }, { "FieldName": "Value", "FieldType": "string", "IsNullable": false } ] } }, "Timestamp": "Wed Jan 29 19:18:03 PST 2020" }
-{ "DataverseName": "Metadata", "DatatypeName": "DatasetRecordType_Hints", "Derived": { "Tag": "UNORDEREDLIST", "IsAnonymous": true, "UnorderedList": "DatasetRecordType_Hints_Item" }, "Timestamp": "Wed Jan 29 19:18:03 PST 2020" }
-{ "DataverseName": "Metadata", "DatatypeName": "DatasetRecordType_Hints_Item", "Derived": { "Tag": "RECORD", "IsAnonymous": true, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "Name", "FieldType": "string", "IsNullable": false }, { "FieldName": "Value", "FieldType": "string", "IsNullable": false } ] } }, "Timestamp": "Wed Jan 29 19:18:03 PST 2020" }
-{ "DataverseName": "Metadata", "DatatypeName": "DatasetRecordType_InternalDetails", "Derived": { "Tag": "RECORD", "IsAnonymous": true, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "FileStructure", "FieldType": "string", "IsNullable": false }, { "FieldName": "PartitioningStrategy", "FieldType": "string", "IsNullable": false }, { "FieldName": "PartitioningKey", "FieldType": "DatasetRecordType_InternalDetails_PartitioningKey", "IsNullable": false }, { "FieldName": "PrimaryKey", "FieldType": "DatasetRecordType_InternalDetails_PrimaryKey", "IsNullable": false }, { "FieldName": "Autogenerated", "FieldType": "boolean", "IsNullable": false } ] } }, "Timestamp": "Wed Jan 29 19:18:03 PST 2020" }
-{ "DataverseName": "Metadata", "DatatypeName": "DatasetRecordType_InternalDetails_PartitioningKey", "Derived": { "Tag": "ORDEREDLIST", "IsAnonymous": true, "OrderedList": "DatasetRecordType_InternalDetails_PartitioningKey_Item" }, "Timestamp": "Wed Jan 29 19:18:03 PST 2020" }
-{ "DataverseName": "Metadata", "DatatypeName": "DatasetRecordType_InternalDetails_PartitioningKey_Item", "Derived": { "Tag": "ORDEREDLIST", "IsAnonymous": true, "OrderedList": "string" }, "Timestamp": "Wed Jan 29 19:18:03 PST 2020" }
-{ "DataverseName": "Metadata", "DatatypeName": "DatasetRecordType_InternalDetails_PrimaryKey", "Derived": { "Tag": "ORDEREDLIST", "IsAnonymous": true, "OrderedList": "DatasetRecordType_InternalDetails_PrimaryKey_Item" }, "Timestamp": "Wed Jan 29 19:18:03 PST 2020" }
-{ "DataverseName": "Metadata", "DatatypeName": "DatasetRecordType_InternalDetails_PrimaryKey_Item", "Derived": { "Tag": "ORDEREDLIST", "IsAnonymous": true, "OrderedList": "string" }, "Timestamp": "Wed Jan 29 19:18:03 PST 2020" }
-{ "DataverseName": "Metadata", "DatatypeName": "DatasourceAdapterRecordType", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "DataverseName", "FieldType": "string", "IsNullable": false }, { "FieldName": "Name", "FieldType": "string", "IsNullable": false }, { "FieldName": "Classname", "FieldType": "string", "IsNullable": false }, { "FieldName": "Type", "FieldType": "string", "IsNullable": false }, { "FieldName": "Timestamp", "FieldType": "string", "IsNullable": false } ] } }, "Timestamp": "Wed Jan 29 19:18:03 PST 2020" }
-{ "DataverseName": "Metadata", "DatatypeName": "DatatypeRecordType", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "DataverseName", "FieldType": "string", "IsNullable": false }, { "FieldName": "DatatypeName", "FieldType": "string", "IsNullable": false }, { "FieldName": "Derived", "FieldType": "DatatypeRecordType_Derived", "IsNullable": true }, { "FieldName": "Timestamp", "FieldType": "string", "IsNullable": false } ] } }, "Timestamp": "Wed Jan 29 19:18:03 PST 2020" }
-{ "DataverseName": "Metadata", "DatatypeName": "DatatypeRecordType_Derived", "Derived": { "Tag": "RECORD", "IsAnonymous": true, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "Tag", "FieldType": "string", "IsNullable": false }, { "FieldName": "IsAnonymous", "FieldType": "boolean", "IsNullable": false }, { "FieldName": "Record", "FieldType": "DatatypeRecordType_Derived_Record", "IsNullable": true }, { "FieldName": "UnorderedList", "FieldType": "string", "IsNullable": true }, { "FieldName": "OrderedList", "FieldType": "string", "IsNullable": true } ] } }, "Timestamp": "Wed Jan 29 19:18:03 PST 2020" }
-{ "DataverseName": "Metadata", "DatatypeName": "DatatypeRecordType_Derived_Record", "Derived": { "Tag": "RECORD", "IsAnonymous": true, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "IsOpen", "FieldType": "boolean", "IsNullable": false }, { "FieldName": "Fields", "FieldType": "DatatypeRecordType_Derived_Record_Fields", "IsNullable": false } ] } }, "Timestamp": "Wed Jan 29 19:18:03 PST 2020" }
-{ "DataverseName": "Metadata", "DatatypeName": "DatatypeRecordType_Derived_Record_Fields", "Derived": { "Tag": "ORDEREDLIST", "IsAnonymous": true, "OrderedList": "DatatypeRecordType_Derived_Record_Fields_Item" }, "Timestamp": "Wed Jan 29 19:18:03 PST 2020" }
-{ "DataverseName": "Metadata", "DatatypeName": "DatatypeRecordType_Derived_Record_Fields_Item", "Derived": { "Tag": "RECORD", "IsAnonymous": true, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "FieldName", "FieldType": "string", "IsNullable": false }, { "FieldName": "FieldType", "FieldType": "string", "IsNullable": false }, { "FieldName": "IsNullable", "FieldType": "boolean", "IsNullable": false } ] } }, "Timestamp": "Wed Jan 29 19:18:03 PST 2020" }
-{ "DataverseName": "Metadata", "DatatypeName": "DataverseRecordType", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "DataverseName", "FieldType": "string", "IsNullable": false }, { "FieldName": "DataFormat", "FieldType": "string", "IsNullable": false }, { "FieldName": "Timestamp", "FieldType": "string", "IsNullable": false }, { "FieldName": "PendingOp", "FieldType": "int32", "IsNullable": false } ] } }, "Timestamp": "Wed Jan 29 19:18:03 PST 2020" }
-{ "DataverseName": "Metadata", "DatatypeName": "ExternalFileRecordType", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "DataverseName", "FieldType": "string", "IsNullable": false }, { "FieldName": "DatasetName", "FieldType": "string", "IsNullable": false }, { "FieldName": "FileNumber", "FieldType": "int32", "IsNullable": false }, { "FieldName": "FileName", "FieldType": "string", "IsNullable": false }, { "FieldName": "FileSize", "FieldType": "int64", "IsNullable": false }, { "FieldName": "FileModTime", "FieldType": "datetime", "IsNullable": false }, { "FieldName": "PendingOp", "FieldType": "int32", "IsNullable": false } ] } }, "Timestamp": "Wed Jan 29 19:18:03 PST 2020" }
-{ "DataverseName": "Metadata", "DatatypeName": "FeedConnectionRecordType", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "DataverseName", "FieldType": "string", "IsNullable": false }, { "FieldName": "FeedName", "FieldType": "string", "IsNullable": false }, { "FieldName": "DatasetName", "FieldType": "string", "IsNullable": false }, { "FieldName": "ReturnType", "FieldType": "string", "IsNullable": false }, { "FieldName": "AppliedFunctions", "FieldType": "FeedConnectionRecordType_AppliedFunctions", "IsNullable": false }, { "FieldName": "PolicyName", "FieldType": "string", "IsNullable": false } ] } }, "Timestamp": "Wed Jan 29 19:18:03 PST 2020" }
-{ "DataverseName": "Metadata", "DatatypeName": "FeedConnectionRecordType_AppliedFunctions", "Derived": { "Tag": "UNORDEREDLIST", "IsAnonymous": true, "UnorderedList": "string" }, "Timestamp": "Wed Jan 29 19:18:03 PST 2020" }
-{ "DataverseName": "Metadata", "DatatypeName": "FeedPolicyRecordType", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "DataverseName", "FieldType": "string", "IsNullable": false }, { "FieldName": "PolicyName", "FieldType": "string", "IsNullable": false }, { "FieldName": "Description", "FieldType": "string", "IsNullable": false }, { "FieldName": "Properties", "FieldType": "FeedPolicyRecordType_Properties", "IsNullable": false } ] } }, "Timestamp": "Wed Jan 29 19:18:03 PST 2020" }
-{ "DataverseName": "Metadata", "DatatypeName": "FeedPolicyRecordType_Properties", "Derived": { "Tag": "UNORDEREDLIST", "IsAnonymous": true, "UnorderedList": "FeedPolicyRecordType_Properties_Item" }, "Timestamp": "Wed Jan 29 19:18:03 PST 2020" }
-{ "DataverseName": "Metadata", "DatatypeName": "FeedPolicyRecordType_Properties_Item", "Derived": { "Tag": "RECORD", "IsAnonymous": true, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "Name", "FieldType": "string", "IsNullable": false }, { "FieldName": "Value", "FieldType": "string", "IsNullable": false } ] } }, "Timestamp": "Wed Jan 29 19:18:03 PST 2020" }
-{ "DataverseName": "Metadata", "DatatypeName": "FeedRecordType", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "DataverseName", "FieldType": "string", "IsNullable": false }, { "FieldName": "FeedName", "FieldType": "string", "IsNullable": false }, { "FieldName": "AdapterConfiguration", "FieldType": "FeedRecordType_AdapterConfiguration", "IsNullable": false }, { "FieldName": "Timestamp", "FieldType": "string", "IsNullable": false } ] } }, "Timestamp": "Wed Jan 29 19:18:03 PST 2020" }
-{ "DataverseName": "Metadata", "DatatypeName": "FeedRecordType_AdapterConfiguration", "Derived": { "Tag": "UNORDEREDLIST", "IsAnonymous": true, "UnorderedList": "FeedRecordType_AdapterConfiguration_Item" }, "Timestamp": "Wed Jan 29 19:18:03 PST 2020" }
-{ "DataverseName": "Metadata", "DatatypeName": "FeedRecordType_AdapterConfiguration_Item", "Derived": { "Tag": "RECORD", "IsAnonymous": true, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "Name", "FieldType": "string", "IsNullable": false }, { "FieldName": "Value", "FieldType": "string", "IsNullable": false } ] } }, "Timestamp": "Wed Jan 29 19:18:03 PST 2020" }
-{ "DataverseName": "Metadata", "DatatypeName": "FunctionRecordType", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "DataverseName", "FieldType": "string", "IsNullable": false }, { "FieldName": "Name", "FieldType": "string", "IsNullable": false }, { "FieldName": "Arity", "FieldType": "string", "IsNullable": false }, { "FieldName": "Params", "FieldType": "FunctionRecordType_Params", "IsNullable": false }, { "FieldName": "ReturnType", "FieldType": "string", "IsNullable": false }, { "FieldName": "Definition", "FieldType": "string", "IsNullable": false }, { "FieldName": "Language", "FieldType": "string", "IsNullable": false }, { "FieldName": "Kind", "FieldType": "string", "IsNullable": false }, { "FieldName": "Dependencies", "FieldType": "FunctionRecordType_Dependencies", "IsNullable": false } ] } }, "Timestamp": "Wed Jan 29 19:18:03 PST 2020" }
-{ "DataverseName": "Metadata", "DatatypeName": "FunctionRecordType_Dependencies", "Derived": { "Tag": "ORDEREDLIST", "IsAnonymous": true, "OrderedList": "FunctionRecordType_Dependencies_Item" }, "Timestamp": "Wed Jan 29 19:18:03 PST 2020" }
-{ "DataverseName": "Metadata", "DatatypeName": "FunctionRecordType_Dependencies_Item", "Derived": { "Tag": "ORDEREDLIST", "IsAnonymous": true, "OrderedList": "FunctionRecordType_Dependencies_Item_Item" }, "Timestamp": "Wed Jan 29 19:18:03 PST 2020" }
-{ "DataverseName": "Metadata", "DatatypeName": "FunctionRecordType_Dependencies_Item_Item", "Derived": { "Tag": "ORDEREDLIST", "IsAnonymous": true, "OrderedList": "string" }, "Timestamp": "Wed Jan 29 19:18:03 PST 2020" }
-{ "DataverseName": "Metadata", "DatatypeName": "FunctionRecordType_Params", "Derived": { "Tag": "ORDEREDLIST", "IsAnonymous": true, "OrderedList": "string" }, "Timestamp": "Wed Jan 29 19:18:03 PST 2020" }
-{ "DataverseName": "Metadata", "DatatypeName": "IndexRecordType", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "DataverseName", "FieldType": "string", "IsNullable": false }, { "FieldName": "DatasetName", "FieldType": "string", "IsNullable": false }, { "FieldName": "IndexName", "FieldType": "string", "IsNullable": false }, { "FieldName": "IndexStructure", "FieldType": "string", "IsNullable": false }, { "FieldName": "SearchKey", "FieldType": "IndexRecordType_SearchKey", "IsNullable": false }, { "FieldName": "IsPrimary", "FieldType": "boolean", "IsNullable": false }, { "FieldName": "Timestamp", "FieldType": "string", "IsNullable": false }, { "FieldName": "PendingOp", "FieldType": "int32", "IsNullable": false } ] } }, "Timestamp": "Wed Jan 29 19:18:03 PST 2020" }
-{ "DataverseName": "Metadata", "DatatypeName": "IndexRecordType_SearchKey", "Derived": { "Tag": "ORDEREDLIST", "IsAnonymous": true, "OrderedList": "IndexRecordType_SearchKey_Item" }, "Timestamp": "Wed Jan 29 19:18:03 PST 2020" }
-{ "DataverseName": "Metadata", "DatatypeName": "IndexRecordType_SearchKey_Item", "Derived": { "Tag": "ORDEREDLIST", "IsAnonymous": true, "OrderedList": "string" }, "Timestamp": "Wed Jan 29 19:18:03 PST 2020" }
-{ "DataverseName": "Metadata", "DatatypeName": "LibraryRecordType", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "DataverseName", "FieldType": "string", "IsNullable": false }, { "FieldName": "Name", "FieldType": "string", "IsNullable": false }, { "FieldName": "Timestamp", "FieldType": "string", "IsNullable": false } ] } }, "Timestamp": "Wed Jan 29 19:18:03 PST 2020" }
-{ "DataverseName": "Metadata", "DatatypeName": "NodeGroupRecordType", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "GroupName", "FieldType": "string", "IsNullable": false }, { "FieldName": "NodeNames", "FieldType": "NodeGroupRecordType_NodeNames", "IsNullable": false }, { "FieldName": "Timestamp", "FieldType": "string", "IsNullable": false } ] } }, "Timestamp": "Wed Jan 29 19:18:03 PST 2020" }
-{ "DataverseName": "Metadata", "DatatypeName": "NodeGroupRecordType_NodeNames", "Derived": { "Tag": "UNORDEREDLIST", "IsAnonymous": true, "UnorderedList": "string" }, "Timestamp": "Wed Jan 29 19:18:03 PST 2020" }
-{ "DataverseName": "Metadata", "DatatypeName": "NodeRecordType", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "NodeName", "FieldType": "string", "IsNullable": false }, { "FieldName": "NumberOfCores", "FieldType": "int64", "IsNullable": false }, { "FieldName": "WorkingMemorySize", "FieldType": "int64", "IsNullable": false } ] } }, "Timestamp": "Wed Jan 29 19:18:03 PST 2020" }
-{ "DataverseName": "Metadata", "DatatypeName": "SynonymRecordType", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "DataverseName", "FieldType": "string", "IsNullable": false }, { "FieldName": "SynonymName", "FieldType": "string", "IsNullable": false }, { "FieldName": "ObjectDataverseName", "FieldType": "string", "IsNullable": false }, { "FieldName": "ObjectName", "FieldType": "string", "IsNullable": false } ] } }, "Timestamp": "Wed Jan 29 19:18:03 PST 2020" }
-{ "DataverseName": "Metadata", "DatatypeName": "binary", "Timestamp": "Wed Jan 29 19:18:03 PST 2020" }
-{ "DataverseName": "Metadata", "DatatypeName": "boolean", "Timestamp": "Wed Jan 29 19:18:03 PST 2020" }
-{ "DataverseName": "Metadata", "DatatypeName": "circle", "Timestamp": "Wed Jan 29 19:18:03 PST 2020" }
-{ "DataverseName": "Metadata", "DatatypeName": "date", "Timestamp": "Wed Jan 29 19:18:03 PST 2020" }
-{ "DataverseName": "Metadata", "DatatypeName": "datetime", "Timestamp": "Wed Jan 29 19:18:03 PST 2020" }
-{ "DataverseName": "Metadata", "DatatypeName": "day-time-duration", "Timestamp": "Wed Jan 29 19:18:03 PST 2020" }
-{ "DataverseName": "Metadata", "DatatypeName": "double", "Timestamp": "Wed Jan 29 19:18:03 PST 2020" }
-{ "DataverseName": "Metadata", "DatatypeName": "duration", "Timestamp": "Wed Jan 29 19:18:03 PST 2020" }
-{ "DataverseName": "Metadata", "DatatypeName": "float", "Timestamp": "Wed Jan 29 19:18:03 PST 2020" }
-{ "DataverseName": "Metadata", "DatatypeName": "geometry", "Timestamp": "Wed Jan 29 19:18:03 PST 2020" }
-{ "DataverseName": "Metadata", "DatatypeName": "int16", "Timestamp": "Wed Jan 29 19:18:03 PST 2020" }
-{ "DataverseName": "Metadata", "DatatypeName": "int32", "Timestamp": "Wed Jan 29 19:18:03 PST 2020" }
-{ "DataverseName": "Metadata", "DatatypeName": "int64", "Timestamp": "Wed Jan 29 19:18:03 PST 2020" }
-{ "DataverseName": "Metadata", "DatatypeName": "int8", "Timestamp": "Wed Jan 29 19:18:03 PST 2020" }
-{ "DataverseName": "Metadata", "DatatypeName": "interval", "Timestamp": "Wed Jan 29 19:18:03 PST 2020" }
-{ "DataverseName": "Metadata", "DatatypeName": "line", "Timestamp": "Wed Jan 29 19:18:03 PST 2020" }
-{ "DataverseName": "Metadata", "DatatypeName": "missing", "Timestamp": "Wed Jan 29 19:18:03 PST 2020" }
-{ "DataverseName": "Metadata", "DatatypeName": "null", "Timestamp": "Wed Jan 29 19:18:03 PST 2020" }
-{ "DataverseName": "Metadata", "DatatypeName": "point", "Timestamp": "Wed Jan 29 19:18:03 PST 2020" }
-{ "DataverseName": "Metadata", "DatatypeName": "point3d", "Timestamp": "Wed Jan 29 19:18:03 PST 2020" }
-{ "DataverseName": "Metadata", "DatatypeName": "polygon", "Timestamp": "Wed Jan 29 19:18:03 PST 2020" }
-{ "DataverseName": "Metadata", "DatatypeName": "rectangle", "Timestamp": "Wed Jan 29 19:18:03 PST 2020" }
-{ "DataverseName": "Metadata", "DatatypeName": "shortwithouttypeinfo", "Timestamp": "Wed Jan 29 19:18:03 PST 2020" }
-{ "DataverseName": "Metadata", "DatatypeName": "string", "Timestamp": "Wed Jan 29 19:18:03 PST 2020" }
-{ "DataverseName": "Metadata", "DatatypeName": "time", "Timestamp": "Wed Jan 29 19:18:03 PST 2020" }
-{ "DataverseName": "Metadata", "DatatypeName": "uuid", "Timestamp": "Wed Jan 29 19:18:03 PST 2020" }
-{ "DataverseName": "Metadata", "DatatypeName": "year-month-duration", "Timestamp": "Wed Jan 29 19:18:03 PST 2020" }
+{ "DataverseName": "Metadata", "DatatypeName": "AnyObject", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": true, "Fields": [  ] } }, "Timestamp": "Thu May 14 18:42:45 PDT 2020" }
+{ "DataverseName": "Metadata", "DatatypeName": "CompactionPolicyRecordType", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "DataverseName", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "CompactionPolicy", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "Classname", "FieldType": "string", "IsNullable": false, "IsMissable": false } ] } }, "Timestamp": "Thu May 14 18:42:45 PDT 2020" }
+{ "DataverseName": "Metadata", "DatatypeName": "DatasetRecordType", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "DataverseName", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "DatasetName", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "DatatypeDataverseName", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "DatatypeName", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "DatasetType", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "GroupName", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "CompactionPolicy", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "CompactionPolicyProperties", "FieldType": "DatasetRecordType_CompactionPolicyProperties", "IsNullable": false, "IsMissable": false }, { "FieldName": "InternalDetails", "FieldType": "DatasetRecordType_InternalDetails", "IsNullable": true, "IsMissable": true }, { "FieldName": "ExternalDetails", "FieldType": "DatasetRecordType_ExternalDetails", "IsNullable": true, "IsMissable": true }, { "FieldName": "Hints", "FieldType": "DatasetRecordType_Hints", "IsNullable": false, "IsMissable": false }, { "FieldName": "Timestamp", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "DatasetId", "FieldType": "int32", "IsNullable": false, "IsMissable": false }, { "FieldName": "PendingOp", "FieldType": "int32", "IsNullable": false, "IsMissable": false } ] } }, "Timestamp": "Thu May 14 18:42:45 PDT 2020" }
+{ "DataverseName": "Metadata", "DatatypeName": "DatasetRecordType_CompactionPolicyProperties", "Derived": { "Tag": "ORDEREDLIST", "IsAnonymous": true, "OrderedList": "DatasetRecordType_CompactionPolicyProperties_Item" }, "Timestamp": "Thu May 14 18:42:45 PDT 2020" }
+{ "DataverseName": "Metadata", "DatatypeName": "DatasetRecordType_CompactionPolicyProperties_Item", "Derived": { "Tag": "RECORD", "IsAnonymous": true, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "Name", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "Value", "FieldType": "string", "IsNullable": false, "IsMissable": false } ] } }, "Timestamp": "Thu May 14 18:42:45 PDT 2020" }
+{ "DataverseName": "Metadata", "DatatypeName": "DatasetRecordType_ExternalDetails", "Derived": { "Tag": "RECORD", "IsAnonymous": true, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "DatasourceAdapter", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "Properties", "FieldType": "DatasetRecordType_ExternalDetails_Properties", "IsNullable": false, "IsMissable": false }, { "FieldName": "LastRefreshTime", "FieldType": "datetime", "IsNullable": false, "IsMissable": false }, { "FieldName": "TransactionState", "FieldType": "int32", "IsNullable": false, "IsMissable": false } ] } }, "Timestamp": "Thu May 14 18:42:45 PDT 2020" }
+{ "DataverseName": "Metadata", "DatatypeName": "DatasetRecordType_ExternalDetails_Properties", "Derived": { "Tag": "ORDEREDLIST", "IsAnonymous": true, "OrderedList": "DatasetRecordType_ExternalDetails_Properties_Item" }, "Timestamp": "Thu May 14 18:42:45 PDT 2020" }
+{ "DataverseName": "Metadata", "DatatypeName": "DatasetRecordType_ExternalDetails_Properties_Item", "Derived": { "Tag": "RECORD", "IsAnonymous": true, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "Name", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "Value", "FieldType": "string", "IsNullable": false, "IsMissable": false } ] } }, "Timestamp": "Thu May 14 18:42:45 PDT 2020" }
+{ "DataverseName": "Metadata", "DatatypeName": "DatasetRecordType_Hints", "Derived": { "Tag": "UNORDEREDLIST", "IsAnonymous": true, "UnorderedList": "DatasetRecordType_Hints_Item" }, "Timestamp": "Thu May 14 18:42:45 PDT 2020" }
+{ "DataverseName": "Metadata", "DatatypeName": "DatasetRecordType_Hints_Item", "Derived": { "Tag": "RECORD", "IsAnonymous": true, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "Name", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "Value", "FieldType": "string", "IsNullable": false, "IsMissable": false } ] } }, "Timestamp": "Thu May 14 18:42:45 PDT 2020" }
+{ "DataverseName": "Metadata", "DatatypeName": "DatasetRecordType_InternalDetails", "Derived": { "Tag": "RECORD", "IsAnonymous": true, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "FileStructure", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "PartitioningStrategy", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "PartitioningKey", "FieldType": "DatasetRecordType_InternalDetails_PartitioningKey", "IsNullable": false, "IsMissable": false }, { "FieldName": "PrimaryKey", "FieldType": "DatasetRecordType_InternalDetails_PrimaryKey", "IsNullable": false, "IsMissable": false }, { "FieldName": "Autogenerated", "FieldType": "boolean", "IsNullable": false, "IsMissable": false } ] } }, "Timestamp": "Thu May 14 18:42:45 PDT 2020" }
+{ "DataverseName": "Metadata", "DatatypeName": "DatasetRecordType_InternalDetails_PartitioningKey", "Derived": { "Tag": "ORDEREDLIST", "IsAnonymous": true, "OrderedList": "DatasetRecordType_InternalDetails_PartitioningKey_Item" }, "Timestamp": "Thu May 14 18:42:45 PDT 2020" }
+{ "DataverseName": "Metadata", "DatatypeName": "DatasetRecordType_InternalDetails_PartitioningKey_Item", "Derived": { "Tag": "ORDEREDLIST", "IsAnonymous": true, "OrderedList": "string" }, "Timestamp": "Thu May 14 18:42:45 PDT 2020" }
+{ "DataverseName": "Metadata", "DatatypeName": "DatasetRecordType_InternalDetails_PrimaryKey", "Derived": { "Tag": "ORDEREDLIST", "IsAnonymous": true, "OrderedList": "DatasetRecordType_InternalDetails_PrimaryKey_Item" }, "Timestamp": "Thu May 14 18:42:45 PDT 2020" }
+{ "DataverseName": "Metadata", "DatatypeName": "DatasetRecordType_InternalDetails_PrimaryKey_Item", "Derived": { "Tag": "ORDEREDLIST", "IsAnonymous": true, "OrderedList": "string" }, "Timestamp": "Thu May 14 18:42:45 PDT 2020" }
+{ "DataverseName": "Metadata", "DatatypeName": "DatasourceAdapterRecordType", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "DataverseName", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "Name", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "Classname", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "Type", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "Timestamp", "FieldType": "string", "IsNullable": false, "IsMissable": false } ] } }, "Timestamp": "Thu May 14 18:42:45 PDT 2020" }
+{ "DataverseName": "Metadata", "DatatypeName": "DatatypeRecordType", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "DataverseName", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "DatatypeName", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "Derived", "FieldType": "DatatypeRecordType_Derived", "IsNullable": true, "IsMissable": true }, { "FieldName": "Timestamp", "FieldType": "string", "IsNullable": false, "IsMissable": false } ] } }, "Timestamp": "Thu May 14 18:42:45 PDT 2020" }
+{ "DataverseName": "Metadata", "DatatypeName": "DatatypeRecordType_Derived", "Derived": { "Tag": "RECORD", "IsAnonymous": true, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "Tag", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "IsAnonymous", "FieldType": "boolean", "IsNullable": false, "IsMissable": false }, { "FieldName": "Record", "FieldType": "DatatypeRecordType_Derived_Record", "IsNullable": true, "IsMissable": true }, { "FieldName": "UnorderedList", "FieldType": "string", "IsNullable": true, "IsMissable": true }, { "FieldName": "OrderedList", "FieldType": "string", "IsNullable": true, "IsMissable": true } ] } }, "Timestamp": "Thu May 14 18:42:45 PDT 2020" }
+{ "DataverseName": "Metadata", "DatatypeName": "DatatypeRecordType_Derived_Record", "Derived": { "Tag": "RECORD", "IsAnonymous": true, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "IsOpen", "FieldType": "boolean", "IsNullable": false, "IsMissable": false }, { "FieldName": "Fields", "FieldType": "DatatypeRecordType_Derived_Record_Fields", "IsNullable": false, "IsMissable": false } ] } }, "Timestamp": "Thu May 14 18:42:45 PDT 2020" }
+{ "DataverseName": "Metadata", "DatatypeName": "DatatypeRecordType_Derived_Record_Fields", "Derived": { "Tag": "ORDEREDLIST", "IsAnonymous": true, "OrderedList": "DatatypeRecordType_Derived_Record_Fields_Item" }, "Timestamp": "Thu May 14 18:42:45 PDT 2020" }
+{ "DataverseName": "Metadata", "DatatypeName": "DatatypeRecordType_Derived_Record_Fields_Item", "Derived": { "Tag": "RECORD", "IsAnonymous": true, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "FieldName", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "FieldType", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "IsNullable", "FieldType": "boolean", "IsNullable": false, "IsMissable": false } ] } }, "Timestamp": "Thu May 14 18:42:45 PDT 2020" }
+{ "DataverseName": "Metadata", "DatatypeName": "DataverseRecordType", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "DataverseName", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "DataFormat", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "Timestamp", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "PendingOp", "FieldType": "int32", "IsNullable": false, "IsMissable": false } ] } }, "Timestamp": "Thu May 14 18:42:45 PDT 2020" }
+{ "DataverseName": "Metadata", "DatatypeName": "ExternalFileRecordType", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "DataverseName", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "DatasetName", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "FileNumber", "FieldType": "int32", "IsNullable": false, "IsMissable": false }, { "FieldName": "FileName", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "FileSize", "FieldType": "int64", "IsNullable": false, "IsMissable": false }, { "FieldName": "FileModTime", "FieldType": "datetime", "IsNullable": false, "IsMissable": false }, { "FieldName": "PendingOp", "FieldType": "int32", "IsNullable": false, "IsMissable": false } ] } }, "Timestamp": "Thu May 14 18:42:45 PDT 2020" }
+{ "DataverseName": "Metadata", "DatatypeName": "FeedConnectionRecordType", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "DataverseName", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "FeedName", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "DatasetName", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "ReturnType", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "AppliedFunctions", "FieldType": "FeedConnectionRecordType_AppliedFunctions", "IsNullable": false, "IsMissable": false }, { "FieldName": "PolicyName", "FieldType": "string", "IsNullable": false, "IsMissable": false } ] } }, "Timestamp": "Thu May 14 18:42:45 PDT 2020" }
+{ "DataverseName": "Metadata", "DatatypeName": "FeedConnectionRecordType_AppliedFunctions", "Derived": { "Tag": "UNORDEREDLIST", "IsAnonymous": true, "UnorderedList": "string" }, "Timestamp": "Thu May 14 18:42:45 PDT 2020" }
+{ "DataverseName": "Metadata", "DatatypeName": "FeedPolicyRecordType", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "DataverseName", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "PolicyName", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "Description", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "Properties", "FieldType": "FeedPolicyRecordType_Properties", "IsNullable": false, "IsMissable": false } ] } }, "Timestamp": "Thu May 14 18:42:45 PDT 2020" }
+{ "DataverseName": "Metadata", "DatatypeName": "FeedPolicyRecordType_Properties", "Derived": { "Tag": "UNORDEREDLIST", "IsAnonymous": true, "UnorderedList": "FeedPolicyRecordType_Properties_Item" }, "Timestamp": "Thu May 14 18:42:45 PDT 2020" }
+{ "DataverseName": "Metadata", "DatatypeName": "FeedPolicyRecordType_Properties_Item", "Derived": { "Tag": "RECORD", "IsAnonymous": true, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "Name", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "Value", "FieldType": "string", "IsNullable": false, "IsMissable": false } ] } }, "Timestamp": "Thu May 14 18:42:45 PDT 2020" }
+{ "DataverseName": "Metadata", "DatatypeName": "FeedRecordType", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "DataverseName", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "FeedName", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "AdapterConfiguration", "FieldType": "FeedRecordType_AdapterConfiguration", "IsNullable": false, "IsMissable": false }, { "FieldName": "Timestamp", "FieldType": "string", "IsNullable": false, "IsMissable": false } ] } }, "Timestamp": "Thu May 14 18:42:45 PDT 2020" }
+{ "DataverseName": "Metadata", "DatatypeName": "FeedRecordType_AdapterConfiguration", "Derived": { "Tag": "UNORDEREDLIST", "IsAnonymous": true, "UnorderedList": "FeedRecordType_AdapterConfiguration_Item" }, "Timestamp": "Thu May 14 18:42:45 PDT 2020" }
+{ "DataverseName": "Metadata", "DatatypeName": "FeedRecordType_AdapterConfiguration_Item", "Derived": { "Tag": "RECORD", "IsAnonymous": true, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "Name", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "Value", "FieldType": "string", "IsNullable": false, "IsMissable": false } ] } }, "Timestamp": "Thu May 14 18:42:45 PDT 2020" }
+{ "DataverseName": "Metadata", "DatatypeName": "FunctionRecordType", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "DataverseName", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "Name", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "Arity", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "Params", "FieldType": "FunctionRecordType_Params", "IsNullable": false, "IsMissable": false }, { "FieldName": "ReturnType", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "Definition", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "Language", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "Kind", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "Dependencies", "FieldType": "FunctionRecordType_Dependencies", "IsNullable": false, "IsMissable": false } ] } }, "Timestamp": "Thu May 14 18:42:45 PDT 2020" }
+{ "DataverseName": "Metadata", "DatatypeName": "FunctionRecordType_Dependencies", "Derived": { "Tag": "ORDEREDLIST", "IsAnonymous": true, "OrderedList": "FunctionRecordType_Dependencies_Item" }, "Timestamp": "Thu May 14 18:42:45 PDT 2020" }
+{ "DataverseName": "Metadata", "DatatypeName": "FunctionRecordType_Dependencies_Item", "Derived": { "Tag": "ORDEREDLIST", "IsAnonymous": true, "OrderedList": "FunctionRecordType_Dependencies_Item_Item" }, "Timestamp": "Thu May 14 18:42:45 PDT 2020" }
+{ "DataverseName": "Metadata", "DatatypeName": "FunctionRecordType_Dependencies_Item_Item", "Derived": { "Tag": "ORDEREDLIST", "IsAnonymous": true, "OrderedList": "string" }, "Timestamp": "Thu May 14 18:42:45 PDT 2020" }
+{ "DataverseName": "Metadata", "DatatypeName": "FunctionRecordType_Params", "Derived": { "Tag": "ORDEREDLIST", "IsAnonymous": true, "OrderedList": "string" }, "Timestamp": "Thu May 14 18:42:45 PDT 2020" }
+{ "DataverseName": "Metadata", "DatatypeName": "IndexRecordType", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "DataverseName", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "DatasetName", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "IndexName", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "IndexStructure", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "SearchKey", "FieldType": "IndexRecordType_SearchKey", "IsNullable": false, "IsMissable": false }, { "FieldName": "IsPrimary", "FieldType": "boolean", "IsNullable": false, "IsMissable": false }, { "FieldName": "Timestamp", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "PendingOp", "FieldType": "int32", "IsNullable": false, "IsMissable": false } ] } }, "Timestamp": "Thu May 14 18:42:45 PDT 2020" }
+{ "DataverseName": "Metadata", "DatatypeName": "IndexRecordType_SearchKey", "Derived": { "Tag": "ORDEREDLIST", "IsAnonymous": true, "OrderedList": "IndexRecordType_SearchKey_Item" }, "Timestamp": "Thu May 14 18:42:45 PDT 2020" }
+{ "DataverseName": "Metadata", "DatatypeName": "IndexRecordType_SearchKey_Item", "Derived": { "Tag": "ORDEREDLIST", "IsAnonymous": true, "OrderedList": "string" }, "Timestamp": "Thu May 14 18:42:45 PDT 2020" }
+{ "DataverseName": "Metadata", "DatatypeName": "LibraryRecordType", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "DataverseName", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "Name", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "Timestamp", "FieldType": "string", "IsNullable": false, "IsMissable": false } ] } }, "Timestamp": "Thu May 14 18:42:45 PDT 2020" }
+{ "DataverseName": "Metadata", "DatatypeName": "NodeGroupRecordType", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "GroupName", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "NodeNames", "FieldType": "NodeGroupRecordType_NodeNames", "IsNullable": false, "IsMissable": false }, { "FieldName": "Timestamp", "FieldType": "string", "IsNullable": false, "IsMissable": false } ] } }, "Timestamp": "Thu May 14 18:42:45 PDT 2020" }
+{ "DataverseName": "Metadata", "DatatypeName": "NodeGroupRecordType_NodeNames", "Derived": { "Tag": "UNORDEREDLIST", "IsAnonymous": true, "UnorderedList": "string" }, "Timestamp": "Thu May 14 18:42:45 PDT 2020" }
+{ "DataverseName": "Metadata", "DatatypeName": "NodeRecordType", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "NodeName", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "NumberOfCores", "FieldType": "int64", "IsNullable": false, "IsMissable": false }, { "FieldName": "WorkingMemorySize", "FieldType": "int64", "IsNullable": false, "IsMissable": false } ] } }, "Timestamp": "Thu May 14 18:42:45 PDT 2020" }
+{ "DataverseName": "Metadata", "DatatypeName": "SynonymRecordType", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "DataverseName", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "SynonymName", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "ObjectDataverseName", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "ObjectName", "FieldType": "string", "IsNullable": false, "IsMissable": false } ] } }, "Timestamp": "Thu May 14 18:42:45 PDT 2020" }
+{ "DataverseName": "Metadata", "DatatypeName": "binary", "Timestamp": "Thu May 14 18:42:45 PDT 2020" }
+{ "DataverseName": "Metadata", "DatatypeName": "boolean", "Timestamp": "Thu May 14 18:42:45 PDT 2020" }
+{ "DataverseName": "Metadata", "DatatypeName": "circle", "Timestamp": "Thu May 14 18:42:45 PDT 2020" }
+{ "DataverseName": "Metadata", "DatatypeName": "date", "Timestamp": "Thu May 14 18:42:45 PDT 2020" }
+{ "DataverseName": "Metadata", "DatatypeName": "datetime", "Timestamp": "Thu May 14 18:42:45 PDT 2020" }
+{ "DataverseName": "Metadata", "DatatypeName": "day-time-duration", "Timestamp": "Thu May 14 18:42:45 PDT 2020" }
+{ "DataverseName": "Metadata", "DatatypeName": "double", "Timestamp": "Thu May 14 18:42:45 PDT 2020" }
+{ "DataverseName": "Metadata", "DatatypeName": "duration", "Timestamp": "Thu May 14 18:42:45 PDT 2020" }
+{ "DataverseName": "Metadata", "DatatypeName": "float", "Timestamp": "Thu May 14 18:42:45 PDT 2020" }
+{ "DataverseName": "Metadata", "DatatypeName": "geometry", "Timestamp": "Thu May 14 18:42:45 PDT 2020" }
+{ "DataverseName": "Metadata", "DatatypeName": "int16", "Timestamp": "Thu May 14 18:42:45 PDT 2020" }
+{ "DataverseName": "Metadata", "DatatypeName": "int32", "Timestamp": "Thu May 14 18:42:45 PDT 2020" }
+{ "DataverseName": "Metadata", "DatatypeName": "int64", "Timestamp": "Thu May 14 18:42:45 PDT 2020" }
+{ "DataverseName": "Metadata", "DatatypeName": "int8", "Timestamp": "Thu May 14 18:42:45 PDT 2020" }
+{ "DataverseName": "Metadata", "DatatypeName": "interval", "Timestamp": "Thu May 14 18:42:45 PDT 2020" }
+{ "DataverseName": "Metadata", "DatatypeName": "line", "Timestamp": "Thu May 14 18:42:45 PDT 2020" }
+{ "DataverseName": "Metadata", "DatatypeName": "missing", "Timestamp": "Thu May 14 18:42:45 PDT 2020" }
+{ "DataverseName": "Metadata", "DatatypeName": "null", "Timestamp": "Thu May 14 18:42:45 PDT 2020" }
+{ "DataverseName": "Metadata", "DatatypeName": "point", "Timestamp": "Thu May 14 18:42:45 PDT 2020" }
+{ "DataverseName": "Metadata", "DatatypeName": "point3d", "Timestamp": "Thu May 14 18:42:45 PDT 2020" }
+{ "DataverseName": "Metadata", "DatatypeName": "polygon", "Timestamp": "Thu May 14 18:42:45 PDT 2020" }
+{ "DataverseName": "Metadata", "DatatypeName": "rectangle", "Timestamp": "Thu May 14 18:42:45 PDT 2020" }
+{ "DataverseName": "Metadata", "DatatypeName": "shortwithouttypeinfo", "Timestamp": "Thu May 14 18:42:45 PDT 2020" }
+{ "DataverseName": "Metadata", "DatatypeName": "string", "Timestamp": "Thu May 14 18:42:45 PDT 2020" }
+{ "DataverseName": "Metadata", "DatatypeName": "time", "Timestamp": "Thu May 14 18:42:45 PDT 2020" }
+{ "DataverseName": "Metadata", "DatatypeName": "uuid", "Timestamp": "Thu May 14 18:42:45 PDT 2020" }
+{ "DataverseName": "Metadata", "DatatypeName": "year-month-duration", "Timestamp": "Thu May 14 18:42:45 PDT 2020" }
diff --git a/asterixdb/asterix-app/src/test/resources/metadata/results/transaction/verify_failure_previous_success/verify_failure_previous_success.1.adm b/asterixdb/asterix-app/src/test/resources/metadata/results/transaction/verify_failure_previous_success/verify_failure_previous_success.1.adm
index 4a0732b..ff88177 100644
--- a/asterixdb/asterix-app/src/test/resources/metadata/results/transaction/verify_failure_previous_success/verify_failure_previous_success.1.adm
+++ b/asterixdb/asterix-app/src/test/resources/metadata/results/transaction/verify_failure_previous_success/verify_failure_previous_success.1.adm
@@ -1,10 +1,10 @@
-{ "DataverseName": "custord", "DatatypeName": "AddressType", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "street", "FieldType": "StreetType", "IsNullable": false }, { "FieldName": "city", "FieldType": "string", "IsNullable": false }, { "FieldName": "state", "FieldType": "string", "IsNullable": false }, { "FieldName": "zip", "FieldType": "int16", "IsNullable": false } ] } }, "Timestamp": "Sat Nov 24 17:20:04 PST 2012" }
-{ "DataverseName": "custord", "DatatypeName": "CustomerType", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": false, "Fields": [ { "FieldName": "cid", "FieldType": "int32", "IsNullable": false }, { "FieldName": "name", "FieldType": "string", "IsNullable": false }, { "FieldName": "age", "FieldType": "int32", "IsNullable": true }, { "FieldName": "address", "FieldType": "AddressType", "IsNullable": true }, { "FieldName": "interests", "FieldType": "CustomerType_interests", "IsNullable": false }, { "FieldName": "children", "FieldType": "CustomerType_children", "IsNullable": false } ] } }, "Timestamp": "Sat Nov 24 17:20:04 PST 2012" }
-{ "DataverseName": "custord", "DatatypeName": "CustomerType_children", "Derived": { "Tag": "ORDEREDLIST", "IsAnonymous": true, "OrderedList": "CustomerType_children_Item" }, "Timestamp": "Sat Nov 24 17:20:04 PST 2012" }
-{ "DataverseName": "custord", "DatatypeName": "CustomerType_children_Item", "Derived": { "Tag": "RECORD", "IsAnonymous": true, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "name", "FieldType": "string", "IsNullable": false }, { "FieldName": "dob", "FieldType": "string", "IsNullable": false } ] } }, "Timestamp": "Sat Nov 24 17:20:04 PST 2012" }
-{ "DataverseName": "custord", "DatatypeName": "CustomerType_interests", "Derived": { "Tag": "UNORDEREDLIST", "IsAnonymous": true, "UnorderedList": "string" }, "Timestamp": "Sat Nov 24 17:20:04 PST 2012" }
-{ "DataverseName": "custord", "DatatypeName": "OrderType", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "oid", "FieldType": "int32", "IsNullable": false }, { "FieldName": "cid", "FieldType": "int32", "IsNullable": false }, { "FieldName": "orderstatus", "FieldType": "string", "IsNullable": false }, { "FieldName": "orderpriority", "FieldType": "string", "IsNullable": false }, { "FieldName": "clerk", "FieldType": "string", "IsNullable": false }, { "FieldName": "total", "FieldType": "float", "IsNullable": false }, { "FieldName": "items", "FieldType": "OrderType_items", "IsNullable": false } ] } }, "Timestamp": "Sat Nov 24 17:20:04 PST 2012" }
-{ "DataverseName": "custord", "DatatypeName": "OrderType_items", "Derived": { "Tag": "ORDEREDLIST", "IsAnonymous": true, "OrderedList": "OrderType_items_Item" }, "Timestamp": "Sat Nov 24 17:20:04 PST 2012" }
-{ "DataverseName": "custord", "DatatypeName": "OrderType_items_Item", "Derived": { "Tag": "RECORD", "IsAnonymous": true, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "number", "FieldType": "int64", "IsNullable": false }, { "FieldName": "storeIds", "FieldType": "OrderType_items_Item_storeIds", "IsNullable": false } ] } }, "Timestamp": "Sat Nov 24 17:20:04 PST 2012" }
-{ "DataverseName": "custord", "DatatypeName": "OrderType_items_Item_storeIds", "Derived": { "Tag": "UNORDEREDLIST", "IsAnonymous": true, "UnorderedList": "int8" }, "Timestamp": "Sat Nov 24 17:20:04 PST 2012" }
-{ "DataverseName": "custord", "DatatypeName": "StreetType", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": false, "Fields": [ { "FieldName": "number", "FieldType": "int32", "IsNullable": true }, { "FieldName": "name", "FieldType": "string", "IsNullable": false } ] } }, "Timestamp": "Sat Nov 24 17:20:04 PST 2012" }
\ No newline at end of file
+{ "DataverseName": "custord", "DatatypeName": "AddressType", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "street", "FieldType": "StreetType", "IsNullable": false, "IsMissable": false }, { "FieldName": "city", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "state", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "zip", "FieldType": "int16", "IsNullable": false, "IsMissable": false } ] } }, "Timestamp": "Fri May 08 17:25:04 PDT 2020" }
+{ "DataverseName": "custord", "DatatypeName": "CustomerType", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": false, "Fields": [ { "FieldName": "cid", "FieldType": "int32", "IsNullable": false, "IsMissable": false }, { "FieldName": "name", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "age", "FieldType": "int32", "IsNullable": true, "IsMissable": true }, { "FieldName": "address", "FieldType": "AddressType", "IsNullable": true, "IsMissable": true }, { "FieldName": "interests", "FieldType": "CustomerType_interests", "IsNullable": false, "IsMissable": false }, { "FieldName": "children", "FieldType": "CustomerType_children", "IsNullable": false, "IsMissable": false } ] } }, "Timestamp": "Fri May 08 17:25:04 PDT 2020" }
+{ "DataverseName": "custord", "DatatypeName": "CustomerType_children", "Derived": { "Tag": "ORDEREDLIST", "IsAnonymous": true, "OrderedList": "CustomerType_children_Item" }, "Timestamp": "Fri May 08 17:25:04 PDT 2020" }
+{ "DataverseName": "custord", "DatatypeName": "CustomerType_children_Item", "Derived": { "Tag": "RECORD", "IsAnonymous": true, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "name", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "dob", "FieldType": "string", "IsNullable": false, "IsMissable": false } ] } }, "Timestamp": "Fri May 08 17:25:04 PDT 2020" }
+{ "DataverseName": "custord", "DatatypeName": "CustomerType_interests", "Derived": { "Tag": "UNORDEREDLIST", "IsAnonymous": true, "UnorderedList": "string" }, "Timestamp": "Fri May 08 17:25:04 PDT 2020" }
+{ "DataverseName": "custord", "DatatypeName": "OrderType", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "oid", "FieldType": "int32", "IsNullable": false, "IsMissable": false }, { "FieldName": "cid", "FieldType": "int32", "IsNullable": false, "IsMissable": false }, { "FieldName": "orderstatus", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "orderpriority", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "clerk", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "total", "FieldType": "float", "IsNullable": false, "IsMissable": false }, { "FieldName": "items", "FieldType": "OrderType_items", "IsNullable": false, "IsMissable": false } ] } }, "Timestamp": "Fri May 08 17:25:04 PDT 2020" }
+{ "DataverseName": "custord", "DatatypeName": "OrderType_items", "Derived": { "Tag": "ORDEREDLIST", "IsAnonymous": true, "OrderedList": "OrderType_items_Item" }, "Timestamp": "Fri May 08 17:25:04 PDT 2020" }
+{ "DataverseName": "custord", "DatatypeName": "OrderType_items_Item", "Derived": { "Tag": "RECORD", "IsAnonymous": true, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "number", "FieldType": "int64", "IsNullable": false, "IsMissable": false }, { "FieldName": "storeIds", "FieldType": "OrderType_items_Item_storeIds", "IsNullable": false, "IsMissable": false } ] } }, "Timestamp": "Fri May 08 17:25:04 PDT 2020" }
+{ "DataverseName": "custord", "DatatypeName": "OrderType_items_Item_storeIds", "Derived": { "Tag": "UNORDEREDLIST", "IsAnonymous": true, "UnorderedList": "int8" }, "Timestamp": "Fri May 08 17:25:04 PDT 2020" }
+{ "DataverseName": "custord", "DatatypeName": "StreetType", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": false, "Fields": [ { "FieldName": "number", "FieldType": "int32", "IsNullable": true, "IsMissable": true }, { "FieldName": "name", "FieldType": "string", "IsNullable": false, "IsMissable": false } ] } }, "Timestamp": "Fri May 08 17:25:04 PDT 2020" }
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/group-by/gby-case-01.3.sqlpp b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/group-by/gby-case-01.3.sqlpp
index 37679f7..f408e69 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/group-by/gby-case-01.3.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/group-by/gby-case-01.3.sqlpp
@@ -22,7 +22,7 @@
 
 use test;
 
-create dataset t1(id integer not null) open type primary key id;
+create dataset t1(id integer not unknown) open type primary key id;
 
 select x,
   case when sum(z)=0 then 0 else sum(y*z)/sum(z) end as res
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/group-by/gby-case-01.4.sqlpp b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/group-by/gby-case-01.4.sqlpp
index f9d5b77..d73995f 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/group-by/gby-case-01.4.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/group-by/gby-case-01.4.sqlpp
@@ -22,7 +22,7 @@
 
 use test;
 
-create dataset t1(id integer not null) open type primary key id;
+create dataset t1(id integer not unknown) open type primary key id;
 
 create function f1() {
   select x,
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/create-dataset-inline-type-1/create-dataset-inline-type-1.1.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/create-dataset-inline-type-1/create-dataset-inline-type-1.1.ddl.sqlpp
index 6230d4b..55f3604 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/create-dataset-inline-type-1/create-dataset-inline-type-1.1.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/create-dataset-inline-type-1/create-dataset-inline-type-1.1.ddl.sqlpp
@@ -38,22 +38,22 @@
 /* Internal datasets */
 
 CREATE DATASET A_Customers_Default_Closed(
-  c_custkey integer not null,
-  c_name string not null,
+  c_custkey integer not unknown,
+  c_name string not unknown,
   c_phone string,
   c_comment string
 ) PRIMARY KEY c_custkey ;
 
 CREATE DATASET A_Customers_Closed(
-  c_custkey integer not null,
-  c_name string not null,
+  c_custkey integer not unknown,
+  c_name string not unknown,
   c_phone string,
   c_comment string
 ) CLOSED TYPE PRIMARY KEY c_custkey;
 
 CREATE DATASET A_Customers_Open(
-  c_custkey integer not null,
-  c_name string not null,
+  c_custkey integer not unknown,
+  c_name string not unknown,
   c_phone string,
   c_comment string
 ) OPEN TYPE PRIMARY KEY c_custkey;
@@ -61,14 +61,14 @@
 /* External datasets */
 
 CREATE EXTERNAL DATASET B_Orders_Default_Closed(
-    o_orderkey integer not null,
-    o_custkey integer not null,
-    o_orderstatus string not null,
-    o_totalprice double not null,
-    o_orderdate string not null,
-    o_orderpriority string not null,
-    o_clerk string not null,
-    o_shippriority integer not null,
+    o_orderkey integer not unknown,
+    o_custkey integer not unknown,
+    o_orderstatus string not unknown,
+    o_totalprice double not unknown,
+    o_orderdate string not unknown,
+    o_orderpriority string not unknown,
+    o_clerk string not unknown,
+    o_shippriority integer not unknown,
     o_comment string
 )
 USING `localfs`
@@ -76,14 +76,14 @@
 (`input-format`=`text-input-format`),(`format`=`delimited-text`),(`delimiter`=`|`));
 
 CREATE EXTERNAL DATASET B_Orders_Closed(
-    o_orderkey integer not null,
-    o_custkey integer not null,
-    o_orderstatus string not null,
-    o_totalprice double not null,
-    o_orderdate string not null,
-    o_orderpriority string not null,
-    o_clerk string not null,
-    o_shippriority integer not null,
+    o_orderkey integer not unknown,
+    o_custkey integer not unknown,
+    o_orderstatus string not unknown,
+    o_totalprice double not unknown,
+    o_orderdate string not unknown,
+    o_orderpriority string not unknown,
+    o_clerk string not unknown,
+    o_shippriority integer not unknown,
     o_comment string
 ) CLOSED TYPE
 USING `localfs`
@@ -91,14 +91,14 @@
 (`input-format`=`text-input-format`),(`format`=`delimited-text`),(`delimiter`=`|`));
 
 CREATE EXTERNAL DATASET B_Orders_Open(
-    o_orderkey integer not null,
-    o_custkey integer not null,
-    o_orderstatus string not null,
-    o_totalprice double not null,
-    o_orderdate string not null,
-    o_orderpriority string not null,
-    o_clerk string not null,
-    o_shippriority integer not null,
+    o_orderkey integer not unknown,
+    o_custkey integer not unknown,
+    o_orderstatus string not unknown,
+    o_totalprice double not unknown,
+    o_orderdate string not unknown,
+    o_orderpriority string not unknown,
+    o_clerk string not unknown,
+    o_shippriority integer not unknown,
     o_comment string
 ) OPEN TYPE
 USING `localfs`
@@ -108,34 +108,34 @@
 /* Internal datasets with inline META type */
 
 CREATE DATASET C_Customers_Meta_Default_Closed(
-  c_custkey integer not null,
-  c_name string not null,
+  c_custkey integer not unknown,
+  c_name string not unknown,
   c_phone string,
   c_comment string
 )
-WITH META(c_x integer not null, c_y integer)
+WITH META(c_x integer not unknown, c_y integer)
 PRIMARY KEY c_custkey ;
 
 CREATE DATASET C_Customers_Meta_Closed(
-  c_custkey integer not null,
-  c_name string not null,
+  c_custkey integer not unknown,
+  c_name string not unknown,
   c_phone string,
   c_comment string
 ) CLOSED TYPE
 WITH META(
-  c_x integer not null,
+  c_x integer not unknown,
   c_y integer
 ) CLOSED TYPE
 PRIMARY KEY c_custkey;
 
 CREATE DATASET C_Customers_Meta_Open(
-  c_custkey integer not null,
-  c_name string not null,
+  c_custkey integer not unknown,
+  c_name string not unknown,
   c_phone string,
   c_comment string
 ) OPEN TYPE
 WITH META(
-  c_x integer not null,
+  c_x integer not unknown,
   c_y integer
 ) OPEN TYPE
 PRIMARY KEY c_custkey;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/create-dataset-inline-type-2/create-dataset-inline-type-2.1.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/create-dataset-inline-type-2/create-dataset-inline-type-2.1.ddl.sqlpp
index d10d096..82548d9 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/create-dataset-inline-type-2/create-dataset-inline-type-2.1.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/create-dataset-inline-type-2/create-dataset-inline-type-2.1.ddl.sqlpp
@@ -25,12 +25,12 @@
 /* Prepare: create datasets with inline type */
 
 CREATE DATASET Cust1(
-  c_custkey integer not null,
-  c_name string not null
+  c_custkey integer not unknown,
+  c_name string not unknown
 ) PRIMARY KEY c_custkey;
 
 CREATE DATASET Cust2(
-  c_custkey integer not null,
-  c_name string not null,
+  c_custkey integer not unknown,
+  c_name string not unknown,
   c_phone string
 ) PRIMARY KEY c_custkey;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/create-dataset-inline-type-2/create-dataset-inline-type-2.4.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/create-dataset-inline-type-2/create-dataset-inline-type-2.4.ddl.sqlpp
index 2ad4888..7e30198 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/create-dataset-inline-type-2/create-dataset-inline-type-2.4.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/create-dataset-inline-type-2/create-dataset-inline-type-2.4.ddl.sqlpp
@@ -24,8 +24,8 @@
 USE test;
 
 CREATE DATASET Cust2X(
-  c_custkey integer not null,
-  c_name string not null
+  c_custkey integer not unknown,
+  c_name string not unknown
 )
 WITH META(`$d$t$i$Cust2`)
 PRIMARY KEY c_custkey;
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/gby-case-01/gby-case-01.1.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/gby-case-01/gby-case-01.1.ddl.sqlpp
index 4c6addb..76552e3 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/gby-case-01/gby-case-01.1.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/gby-case-01/gby-case-01.1.ddl.sqlpp
@@ -22,7 +22,7 @@
 
 use test;
 
-create dataset t1(id integer not null) open type primary key id;
+create dataset t1(id integer not unknown) open type primary key id;
 
 create function f1() {
   select x,
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/gby-nested-01/gby-nested-01.1.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/gby-nested-01/gby-nested-01.1.ddl.sqlpp
index 859c349..d75bfcd 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/gby-nested-01/gby-nested-01.1.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/gby-nested-01/gby-nested-01.1.ddl.sqlpp
@@ -22,5 +22,5 @@
 
 use test;
 
-create dataset prd(p_id integer not null) open type primary key p_id;
-create dataset sls(s_id integer not null) open type primary key s_id;
+create dataset prd(p_id integer not unknown) open type primary key p_id;
+create dataset sls(s_id integer not unknown) open type primary key s_id;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/ddl/create-dataset-inline-type-1/create-dataset-inline-type-1.2.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/ddl/create-dataset-inline-type-1/create-dataset-inline-type-1.2.adm
index 8a539c8..992045b 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/ddl/create-dataset-inline-type-1/create-dataset-inline-type-1.2.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/ddl/create-dataset-inline-type-1/create-dataset-inline-type-1.2.adm
@@ -7,15 +7,15 @@
 { "en": "Dataset", "DatatypeName": "$d$t$i$C_Customers_Meta_Closed", "DatasetName": "C_Customers_Meta_Closed", "DatatypeDataverseName": "test", "MetatypeDataverseName": "test", "MetatypeName": "$d$t$m$C_Customers_Meta_Closed" }
 { "en": "Dataset", "DatatypeName": "$d$t$i$C_Customers_Meta_Default_Closed", "DatasetName": "C_Customers_Meta_Default_Closed", "DatatypeDataverseName": "test", "MetatypeDataverseName": "test", "MetatypeName": "$d$t$m$C_Customers_Meta_Default_Closed" }
 { "en": "Dataset", "DatatypeName": "$d$t$i$C_Customers_Meta_Open", "DatasetName": "C_Customers_Meta_Open", "DatatypeDataverseName": "test", "MetatypeDataverseName": "test", "MetatypeName": "$d$t$m$C_Customers_Meta_Open" }
-{ "en": "Datatype", "DatatypeName": "$d$t$i$A_Customers_Closed", "Derived": { "Tag": "RECORD", "IsAnonymous": true, "Record": { "IsOpen": false, "Fields": [ { "FieldName": "c_custkey", "FieldType": "int32", "IsNullable": false }, { "FieldName": "c_name", "FieldType": "string", "IsNullable": false }, { "FieldName": "c_phone", "FieldType": "string", "IsNullable": true }, { "FieldName": "c_comment", "FieldType": "string", "IsNullable": true } ] } } }
-{ "en": "Datatype", "DatatypeName": "$d$t$i$A_Customers_Default_Closed", "Derived": { "Tag": "RECORD", "IsAnonymous": true, "Record": { "IsOpen": false, "Fields": [ { "FieldName": "c_custkey", "FieldType": "int32", "IsNullable": false }, { "FieldName": "c_name", "FieldType": "string", "IsNullable": false }, { "FieldName": "c_phone", "FieldType": "string", "IsNullable": true }, { "FieldName": "c_comment", "FieldType": "string", "IsNullable": true } ] } } }
-{ "en": "Datatype", "DatatypeName": "$d$t$i$A_Customers_Open", "Derived": { "Tag": "RECORD", "IsAnonymous": true, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "c_custkey", "FieldType": "int32", "IsNullable": false }, { "FieldName": "c_name", "FieldType": "string", "IsNullable": false }, { "FieldName": "c_phone", "FieldType": "string", "IsNullable": true }, { "FieldName": "c_comment", "FieldType": "string", "IsNullable": true } ] } } }
-{ "en": "Datatype", "DatatypeName": "$d$t$i$B_Orders_Closed", "Derived": { "Tag": "RECORD", "IsAnonymous": true, "Record": { "IsOpen": false, "Fields": [ { "FieldName": "o_orderkey", "FieldType": "int32", "IsNullable": false }, { "FieldName": "o_custkey", "FieldType": "int32", "IsNullable": false }, { "FieldName": "o_orderstatus", "FieldType": "string", "IsNullable": false }, { "FieldName": "o_totalprice", "FieldType": "double", "IsNullable": false }, { "FieldName": "o_orderdate", "FieldType": "string", "IsNullable": false }, { "FieldName": "o_orderpriority", "FieldType": "string", "IsNullable": false }, { "FieldName": "o_clerk", "FieldType": "string", "IsNullable": false }, { "FieldName": "o_shippriority", "FieldType": "int32", "IsNullable": false }, { "FieldName": "o_comment", "FieldType": "string", "IsNullable": true } ] } } }
-{ "en": "Datatype", "DatatypeName": "$d$t$i$B_Orders_Default_Closed", "Derived": { "Tag": "RECORD", "IsAnonymous": true, "Record": { "IsOpen": false, "Fields": [ { "FieldName": "o_orderkey", "FieldType": "int32", "IsNullable": false }, { "FieldName": "o_custkey", "FieldType": "int32", "IsNullable": false }, { "FieldName": "o_orderstatus", "FieldType": "string", "IsNullable": false }, { "FieldName": "o_totalprice", "FieldType": "double", "IsNullable": false }, { "FieldName": "o_orderdate", "FieldType": "string", "IsNullable": false }, { "FieldName": "o_orderpriority", "FieldType": "string", "IsNullable": false }, { "FieldName": "o_clerk", "FieldType": "string", "IsNullable": false }, { "FieldName": "o_shippriority", "FieldType": "int32", "IsNullable": false }, { "FieldName": "o_comment", "FieldType": "string", "IsNullable": true } ] } } }
-{ "en": "Datatype", "DatatypeName": "$d$t$i$B_Orders_Open", "Derived": { "Tag": "RECORD", "IsAnonymous": true, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "o_orderkey", "FieldType": "int32", "IsNullable": false }, { "FieldName": "o_custkey", "FieldType": "int32", "IsNullable": false }, { "FieldName": "o_orderstatus", "FieldType": "string", "IsNullable": false }, { "FieldName": "o_totalprice", "FieldType": "double", "IsNullable": false }, { "FieldName": "o_orderdate", "FieldType": "string", "IsNullable": false }, { "FieldName": "o_orderpriority", "FieldType": "string", "IsNullable": false }, { "FieldName": "o_clerk", "FieldType": "string", "IsNullable": false }, { "FieldName": "o_shippriority", "FieldType": "int32", "IsNullable": false }, { "FieldName": "o_comment", "FieldType": "string", "IsNullable": true } ] } } }
-{ "en": "Datatype", "DatatypeName": "$d$t$i$C_Customers_Meta_Closed", "Derived": { "Tag": "RECORD", "IsAnonymous": true, "Record": { "IsOpen": false, "Fields": [ { "FieldName": "c_custkey", "FieldType": "int32", "IsNullable": false }, { "FieldName": "c_name", "FieldType": "string", "IsNullable": false }, { "FieldName": "c_phone", "FieldType": "string", "IsNullable": true }, { "FieldName": "c_comment", "FieldType": "string", "IsNullable": true } ] } } }
-{ "en": "Datatype", "DatatypeName": "$d$t$i$C_Customers_Meta_Default_Closed", "Derived": { "Tag": "RECORD", "IsAnonymous": true, "Record": { "IsOpen": false, "Fields": [ { "FieldName": "c_custkey", "FieldType": "int32", "IsNullable": false }, { "FieldName": "c_name", "FieldType": "string", "IsNullable": false }, { "FieldName": "c_phone", "FieldType": "string", "IsNullable": true }, { "FieldName": "c_comment", "FieldType": "string", "IsNullable": true } ] } } }
-{ "en": "Datatype", "DatatypeName": "$d$t$i$C_Customers_Meta_Open", "Derived": { "Tag": "RECORD", "IsAnonymous": true, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "c_custkey", "FieldType": "int32", "IsNullable": false }, { "FieldName": "c_name", "FieldType": "string", "IsNullable": false }, { "FieldName": "c_phone", "FieldType": "string", "IsNullable": true }, { "FieldName": "c_comment", "FieldType": "string", "IsNullable": true } ] } } }
-{ "en": "Datatype", "DatatypeName": "$d$t$m$C_Customers_Meta_Closed", "Derived": { "Tag": "RECORD", "IsAnonymous": true, "Record": { "IsOpen": false, "Fields": [ { "FieldName": "c_x", "FieldType": "int32", "IsNullable": false }, { "FieldName": "c_y", "FieldType": "int32", "IsNullable": true } ] } } }
-{ "en": "Datatype", "DatatypeName": "$d$t$m$C_Customers_Meta_Default_Closed", "Derived": { "Tag": "RECORD", "IsAnonymous": true, "Record": { "IsOpen": false, "Fields": [ { "FieldName": "c_x", "FieldType": "int32", "IsNullable": false }, { "FieldName": "c_y", "FieldType": "int32", "IsNullable": true } ] } } }
-{ "en": "Datatype", "DatatypeName": "$d$t$m$C_Customers_Meta_Open", "Derived": { "Tag": "RECORD", "IsAnonymous": true, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "c_x", "FieldType": "int32", "IsNullable": false }, { "FieldName": "c_y", "FieldType": "int32", "IsNullable": true } ] } } }
+{ "en": "Datatype", "DatatypeName": "$d$t$i$A_Customers_Closed", "Derived": { "Tag": "RECORD", "IsAnonymous": true, "Record": { "IsOpen": false, "Fields": [ { "FieldName": "c_custkey", "FieldType": "int32", "IsNullable": false, "IsMissable": false }, { "FieldName": "c_name", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "c_phone", "FieldType": "string", "IsNullable": true, "IsMissable": true }, { "FieldName": "c_comment", "FieldType": "string", "IsNullable": true, "IsMissable": true } ] } } }
+{ "en": "Datatype", "DatatypeName": "$d$t$i$A_Customers_Default_Closed", "Derived": { "Tag": "RECORD", "IsAnonymous": true, "Record": { "IsOpen": false, "Fields": [ { "FieldName": "c_custkey", "FieldType": "int32", "IsNullable": false, "IsMissable": false }, { "FieldName": "c_name", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "c_phone", "FieldType": "string", "IsNullable": true, "IsMissable": true }, { "FieldName": "c_comment", "FieldType": "string", "IsNullable": true, "IsMissable": true } ] } } }
+{ "en": "Datatype", "DatatypeName": "$d$t$i$A_Customers_Open", "Derived": { "Tag": "RECORD", "IsAnonymous": true, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "c_custkey", "FieldType": "int32", "IsNullable": false, "IsMissable": false }, { "FieldName": "c_name", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "c_phone", "FieldType": "string", "IsNullable": true, "IsMissable": true }, { "FieldName": "c_comment", "FieldType": "string", "IsNullable": true, "IsMissable": true } ] } } }
+{ "en": "Datatype", "DatatypeName": "$d$t$i$B_Orders_Closed", "Derived": { "Tag": "RECORD", "IsAnonymous": true, "Record": { "IsOpen": false, "Fields": [ { "FieldName": "o_orderkey", "FieldType": "int32", "IsNullable": false, "IsMissable": false }, { "FieldName": "o_custkey", "FieldType": "int32", "IsNullable": false, "IsMissable": false }, { "FieldName": "o_orderstatus", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "o_totalprice", "FieldType": "double", "IsNullable": false, "IsMissable": false }, { "FieldName": "o_orderdate", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "o_orderpriority", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "o_clerk", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "o_shippriority", "FieldType": "int32", "IsNullable": false, "IsMissable": false }, { "FieldName": "o_comment", "FieldType": "string", "IsNullable": true, "IsMissable": true } ] } } }
+{ "en": "Datatype", "DatatypeName": "$d$t$i$B_Orders_Default_Closed", "Derived": { "Tag": "RECORD", "IsAnonymous": true, "Record": { "IsOpen": false, "Fields": [ { "FieldName": "o_orderkey", "FieldType": "int32", "IsNullable": false, "IsMissable": false }, { "FieldName": "o_custkey", "FieldType": "int32", "IsNullable": false, "IsMissable": false }, { "FieldName": "o_orderstatus", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "o_totalprice", "FieldType": "double", "IsNullable": false, "IsMissable": false }, { "FieldName": "o_orderdate", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "o_orderpriority", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "o_clerk", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "o_shippriority", "FieldType": "int32", "IsNullable": false, "IsMissable": false }, { "FieldName": "o_comment", "FieldType": "string", "IsNullable": true, "IsMissable": true } ] } } }
+{ "en": "Datatype", "DatatypeName": "$d$t$i$B_Orders_Open", "Derived": { "Tag": "RECORD", "IsAnonymous": true, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "o_orderkey", "FieldType": "int32", "IsNullable": false, "IsMissable": false }, { "FieldName": "o_custkey", "FieldType": "int32", "IsNullable": false, "IsMissable": false }, { "FieldName": "o_orderstatus", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "o_totalprice", "FieldType": "double", "IsNullable": false, "IsMissable": false }, { "FieldName": "o_orderdate", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "o_orderpriority", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "o_clerk", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "o_shippriority", "FieldType": "int32", "IsNullable": false, "IsMissable": false }, { "FieldName": "o_comment", "FieldType": "string", "IsNullable": true, "IsMissable": true } ] } } }
+{ "en": "Datatype", "DatatypeName": "$d$t$i$C_Customers_Meta_Closed", "Derived": { "Tag": "RECORD", "IsAnonymous": true, "Record": { "IsOpen": false, "Fields": [ { "FieldName": "c_custkey", "FieldType": "int32", "IsNullable": false, "IsMissable": false }, { "FieldName": "c_name", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "c_phone", "FieldType": "string", "IsNullable": true, "IsMissable": true }, { "FieldName": "c_comment", "FieldType": "string", "IsNullable": true, "IsMissable": true } ] } } }
+{ "en": "Datatype", "DatatypeName": "$d$t$i$C_Customers_Meta_Default_Closed", "Derived": { "Tag": "RECORD", "IsAnonymous": true, "Record": { "IsOpen": false, "Fields": [ { "FieldName": "c_custkey", "FieldType": "int32", "IsNullable": false, "IsMissable": false }, { "FieldName": "c_name", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "c_phone", "FieldType": "string", "IsNullable": true, "IsMissable": true }, { "FieldName": "c_comment", "FieldType": "string", "IsNullable": true, "IsMissable": true } ] } } }
+{ "en": "Datatype", "DatatypeName": "$d$t$i$C_Customers_Meta_Open", "Derived": { "Tag": "RECORD", "IsAnonymous": true, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "c_custkey", "FieldType": "int32", "IsNullable": false, "IsMissable": false }, { "FieldName": "c_name", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "c_phone", "FieldType": "string", "IsNullable": true, "IsMissable": true }, { "FieldName": "c_comment", "FieldType": "string", "IsNullable": true, "IsMissable": true } ] } } }
+{ "en": "Datatype", "DatatypeName": "$d$t$m$C_Customers_Meta_Closed", "Derived": { "Tag": "RECORD", "IsAnonymous": true, "Record": { "IsOpen": false, "Fields": [ { "FieldName": "c_x", "FieldType": "int32", "IsNullable": false, "IsMissable": false }, { "FieldName": "c_y", "FieldType": "int32", "IsNullable": true, "IsMissable": true } ] } } }
+{ "en": "Datatype", "DatatypeName": "$d$t$m$C_Customers_Meta_Default_Closed", "Derived": { "Tag": "RECORD", "IsAnonymous": true, "Record": { "IsOpen": false, "Fields": [ { "FieldName": "c_x", "FieldType": "int32", "IsNullable": false, "IsMissable": false }, { "FieldName": "c_y", "FieldType": "int32", "IsNullable": true, "IsMissable": true } ] } } }
+{ "en": "Datatype", "DatatypeName": "$d$t$m$C_Customers_Meta_Open", "Derived": { "Tag": "RECORD", "IsAnonymous": true, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "c_x", "FieldType": "int32", "IsNullable": false, "IsMissable": false }, { "FieldName": "c_y", "FieldType": "int32", "IsNullable": true, "IsMissable": true } ] } } }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/dml/create-drop-cltype/create-drop-cltype.1.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/dml/create-drop-cltype/create-drop-cltype.1.adm
index e965793..d7f4edc 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/dml/create-drop-cltype/create-drop-cltype.1.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/dml/create-drop-cltype/create-drop-cltype.1.adm
@@ -1 +1 @@
-{ "DataverseName": "test", "DatatypeName": "TestType", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": false, "Fields": [ { "FieldName": "id", "FieldType": "int32", "IsNullable": false }, { "FieldName": "salary", "FieldType": "double", "IsNullable": true }, { "FieldName": "name", "FieldType": "string", "IsNullable": false }, { "FieldName": "durtn", "FieldType": "duration", "IsNullable": true }, { "FieldName": "inter", "FieldType": "interval", "IsNullable": false }, { "FieldName": "dt", "FieldType": "date", "IsNullable": true }, { "FieldName": "tm", "FieldType": "time", "IsNullable": false }, { "FieldName": "pt", "FieldType": "point", "IsNullable": true } ] } }, "Timestamp": "Tue Jun 21 16:01:27 PDT 2016" }
+{ "DataverseName": "test", "DatatypeName": "TestType", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": false, "Fields": [ { "FieldName": "id", "FieldType": "int32", "IsNullable": false, "IsMissable": false }, { "FieldName": "salary", "FieldType": "double", "IsNullable": true, "IsMissable": true }, { "FieldName": "name", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "durtn", "FieldType": "duration", "IsNullable": true, "IsMissable": true }, { "FieldName": "inter", "FieldType": "interval", "IsNullable": false, "IsMissable": false }, { "FieldName": "dt", "FieldType": "date", "IsNullable": true, "IsMissable": true }, { "FieldName": "tm", "FieldType": "time", "IsNullable": false, "IsMissable": false }, { "FieldName": "pt", "FieldType": "point", "IsNullable": true, "IsMissable": true } ] } }, "Timestamp": "Tue Jun 21 16:01:27 PDT 2016" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/dml/create-drop-opntype/create-drop-opntype.1.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/dml/create-drop-opntype/create-drop-opntype.1.adm
index e268379..e494b17 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/dml/create-drop-opntype/create-drop-opntype.1.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/dml/create-drop-opntype/create-drop-opntype.1.adm
@@ -1 +1 @@
-{ "DataverseName": "test", "DatatypeName": "TestType", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "id", "FieldType": "int32", "IsNullable": false }, { "FieldName": "salary", "FieldType": "double", "IsNullable": true }, { "FieldName": "name", "FieldType": "string", "IsNullable": false }, { "FieldName": "durtn", "FieldType": "duration", "IsNullable": true }, { "FieldName": "inter", "FieldType": "interval", "IsNullable": false }, { "FieldName": "dt", "FieldType": "date", "IsNullable": true }, { "FieldName": "tm", "FieldType": "time", "IsNullable": false }, { "FieldName": "pt", "FieldType": "point", "IsNullable": true } ] } }, "Timestamp": "Tue Jun 21 16:01:27 PDT 2016" }
+{ "DataverseName": "test", "DatatypeName": "TestType", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "id", "FieldType": "int32", "IsNullable": false, "IsMissable": false }, { "FieldName": "salary", "FieldType": "double", "IsNullable": true, "IsMissable": true }, { "FieldName": "name", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "durtn", "FieldType": "duration", "IsNullable": true, "IsMissable": true }, { "FieldName": "inter", "FieldType": "interval", "IsNullable": false, "IsMissable": false }, { "FieldName": "dt", "FieldType": "date", "IsNullable": true, "IsMissable": true }, { "FieldName": "tm", "FieldType": "time", "IsNullable": false, "IsMissable": false }, { "FieldName": "pt", "FieldType": "point", "IsNullable": true, "IsMissable": true } ] } }, "Timestamp": "Tue Jun 21 16:01:27 PDT 2016" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/external-library/udf_metadata/udf_metadata.3.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/external-library/udf_metadata/udf_metadata.3.adm
index 3b87226..67f81b2 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/external-library/udf_metadata/udf_metadata.3.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/external-library/udf_metadata/udf_metadata.3.adm
@@ -7,7 +7,7 @@
 { "fn": { "DataverseName": "externallibtest", "Name": "myfn007", "Arity": "1", "Params": [ "a" ], "ReturnType": "fn$myfn007$1", "Definition": "org.apache.asterix.external.library.CapitalFinderFactory", "Language": "JAVA", "Kind": "SCALAR", "Dependencies": [ [  ], [  ], [  ] ], "ReturnTypeIsNullable": true, "ParamTypes": [ { "Type": "fn$myfn007$1$0", "IsNullable": true } ], "Library": "testlib", "NullCall": false, "Deterministic": false } }
 { "fn": { "DataverseName": "externallibtest", "Name": "myfn008", "Arity": "1", "Params": [ "a" ], "ReturnType": "fn$myfn008$1", "Definition": "org.apache.asterix.external.library.CapitalFinderFactory", "Language": "JAVA", "Kind": "SCALAR", "Dependencies": [ [  ], [  ], [ [ "externallibtest", "CountryCapitalType" ] ] ], "ReturnTypeIsNullable": false, "ParamTypes": [ { "Type": "fn$myfn008$1$0", "IsNullable": false } ], "Library": "testlib", "NullCall": false, "Deterministic": false } }
 { "fn": { "DataverseName": "externallibtest", "Name": "myfn009", "Arity": "1", "Params": [ "a" ], "ReturnType": "fn$myfn009$1", "Definition": "org.apache.asterix.external.library.CapitalFinderFactory", "Language": "JAVA", "Kind": "SCALAR", "Dependencies": [ [  ], [  ], [ [ "externallibtest", "CountryCapitalType" ] ] ], "ReturnTypeIsNullable": true, "ParamTypes": [ { "Type": "fn$myfn009$1$0", "IsNullable": true } ], "Library": "testlib", "NullCall": false, "Deterministic": false } }
-{ "dt": { "DataverseName": "externallibtest", "DatatypeName": "CountryCapitalType", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": false, "Fields": [ { "FieldName": "country", "FieldType": "string", "IsNullable": false }, { "FieldName": "capital", "FieldType": "string", "IsNullable": false } ] } } } }
+{ "dt": { "DataverseName": "externallibtest", "DatatypeName": "CountryCapitalType", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": false, "Fields": [ { "FieldName": "country", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "capital", "FieldType": "string", "IsNullable": false, "IsMissable": false } ] } } } }
 { "dt": { "DataverseName": "externallibtest", "DatatypeName": "fn$myfn003$3$1", "Derived": { "Tag": "ORDEREDLIST", "IsAnonymous": true, "OrderedList": "int64" } } }
 { "dt": { "DataverseName": "externallibtest", "DatatypeName": "fn$myfn003$3$2", "Derived": { "Tag": "UNORDEREDLIST", "IsAnonymous": true, "UnorderedList": "boolean" } } }
 { "dt": { "DataverseName": "externallibtest", "DatatypeName": "fn$myfn004$2$1", "Derived": { "Tag": "ORDEREDLIST", "IsAnonymous": true, "OrderedList": "CountryCapitalType" } } }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/types/any-object/any-object.2.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/types/any-object/any-object.2.adm
index c8f7e91..a35256d 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/types/any-object/any-object.2.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/types/any-object/any-object.2.adm
@@ -1,3 +1,3 @@
 { "DataverseName": "test", "DatatypeName": "AnyObject", "Derived": { "Tag": "RECORD", "IsAnonymous": true, "Record": { "IsOpen": true, "Fields": [  ] } }, "Timestamp": "Fri Mar 10 17:36:46 PST 2017" }
-{ "DataverseName": "test", "DatatypeName": "kv1", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "id", "FieldType": "int32", "IsNullable": false }, { "FieldName": "val", "FieldType": "AnyObject", "IsNullable": false } ] } }, "Timestamp": "Fri Mar 10 17:36:46 PST 2017" }
-{ "DataverseName": "test", "DatatypeName": "kv2", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "id", "FieldType": "int32", "IsNullable": false }, { "FieldName": "val", "FieldType": "AnyObject", "IsNullable": false } ] } }, "Timestamp": "Fri Mar 10 17:36:46 PST 2017" }
+{ "DataverseName": "test", "DatatypeName": "kv1", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "id", "FieldType": "int32", "IsNullable": false, "IsMissable": false }, { "FieldName": "val", "FieldType": "AnyObject", "IsNullable": false, "IsMissable": false } ] } }, "Timestamp": "Fri Mar 10 17:36:46 PST 2017" }
+{ "DataverseName": "test", "DatatypeName": "kv2", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "id", "FieldType": "int32", "IsNullable": false, "IsMissable": false }, { "FieldName": "val", "FieldType": "AnyObject", "IsNullable": false, "IsMissable": false } ] } }, "Timestamp": "Fri Mar 10 17:36:46 PST 2017" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf32_metadata/udf32_metadata.2.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf32_metadata/udf32_metadata.2.adm
index a6d1478..c78c3d4 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf32_metadata/udf32_metadata.2.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf32_metadata/udf32_metadata.2.adm
@@ -7,7 +7,7 @@
 { "fn": { "DataverseName": "test", "Name": "myfn007", "Arity": "1", "Params": [ "a" ], "ReturnType": "fn$myfn007$1", "Definition": "a", "Language": "SQLPP", "Kind": "SCALAR", "Dependencies": [ [  ], [  ], [  ] ], "ReturnTypeIsNullable": true, "ParamTypes": [ { "Type": "fn$myfn007$1$0", "IsNullable": true } ] } }
 { "fn": { "DataverseName": "test", "Name": "myfn008", "Arity": "1", "Params": [ "a" ], "ReturnType": "fn$myfn008$1", "Definition": "a", "Language": "SQLPP", "Kind": "SCALAR", "Dependencies": [ [  ], [  ], [ [ "test", "MyType1" ] ] ], "ReturnTypeIsNullable": false, "ParamTypes": [ { "Type": "fn$myfn008$1$0", "IsNullable": false } ] } }
 { "fn": { "DataverseName": "test", "Name": "myfn009", "Arity": "1", "Params": [ "a" ], "ReturnType": "fn$myfn009$1", "Definition": "a", "Language": "SQLPP", "Kind": "SCALAR", "Dependencies": [ [  ], [  ], [ [ "test", "MyType1" ] ] ], "ReturnTypeIsNullable": true, "ParamTypes": [ { "Type": "fn$myfn009$1$0", "IsNullable": true } ] } }
-{ "dt": { "DataverseName": "test", "DatatypeName": "MyType1", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "id", "FieldType": "int64", "IsNullable": false }, { "FieldName": "value", "FieldType": "string", "IsNullable": false } ] } } } }
+{ "dt": { "DataverseName": "test", "DatatypeName": "MyType1", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "id", "FieldType": "int64", "IsNullable": false, "IsMissable": false }, { "FieldName": "value", "FieldType": "string", "IsNullable": false, "IsMissable": false } ] } } } }
 { "dt": { "DataverseName": "test", "DatatypeName": "fn$myfn003$3$1", "Derived": { "Tag": "ORDEREDLIST", "IsAnonymous": true, "OrderedList": "int64" } } }
 { "dt": { "DataverseName": "test", "DatatypeName": "fn$myfn003$3$2", "Derived": { "Tag": "UNORDEREDLIST", "IsAnonymous": true, "UnorderedList": "boolean" } } }
 { "dt": { "DataverseName": "test", "DatatypeName": "fn$myfn004$2$1", "Derived": { "Tag": "ORDEREDLIST", "IsAnonymous": true, "OrderedList": "MyType1" } } }
diff --git a/asterixdb/asterix-lang-aql/src/main/javacc/AQL.jj b/asterixdb/asterix-lang-aql/src/main/javacc/AQL.jj
index ca515e5..2711e16 100644
--- a/asterixdb/asterix-lang-aql/src/main/javacc/AQL.jj
+++ b/asterixdb/asterix-lang-aql/src/main/javacc/AQL.jj
@@ -1405,7 +1405,7 @@
 {
   String fieldName;
   TypeExpression type = null;
-  boolean nullable = false;
+  boolean nullable = false, missable = false;
 }
 {
   fieldName = Identifier()
@@ -1413,9 +1413,9 @@
       String hint = getHint(token);
       IRecordFieldDataGen rfdg = hint != null ? parseFieldDataGen(hint) : null;
     }
-  <COLON> type =  TypeExpr() (<QUES> { nullable = true; } )?
+  <COLON> type =  TypeExpr() (<QUES> { nullable = true; missable = true; } )?
     {
-      recType.addField(fieldName, type, nullable, rfdg);
+      recType.addField(fieldName, type, nullable, missable, rfdg);
     }
 }
 
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/RecordTypeDefinition.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/RecordTypeDefinition.java
index 4fcc7ae..8cdd911 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/RecordTypeDefinition.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/RecordTypeDefinition.java
@@ -37,7 +37,8 @@
     private final List<String> fieldNames = new ArrayList<>();
     private final List<TypeExpression> fieldTypes = new ArrayList<>();
     private final List<IRecordFieldDataGen> fieldDataGen = new ArrayList<>();
-    private final List<Boolean> optionalFields = new ArrayList<>();
+    private final List<Boolean> nullableFields = new ArrayList<>();
+    private final List<Boolean> missableFields = new ArrayList<>();
     private RecordKind recordKind;
     private UndeclaredFieldsDataGen undeclaredFieldsDataGen;
 
@@ -50,17 +51,20 @@
         return TypeExprKind.RECORD;
     }
 
-    public void addField(String name, TypeExpression type, Boolean nullable, IRecordFieldDataGen fldDataGen) {
+    public void addField(String name, TypeExpression type, boolean nullable, boolean missable,
+            IRecordFieldDataGen fldDataGen) {
         fieldNames.add(name);
         fieldTypes.add(type);
-        optionalFields.add(nullable);
+        nullableFields.add(nullable);
+        missableFields.add(missable);
         fieldDataGen.add(fldDataGen);
     }
 
-    public void addField(String name, TypeExpression type, Boolean optional) {
+    public void addField(String name, TypeExpression type, boolean nullable, boolean missable) {
         fieldNames.add(name);
         fieldTypes.add(type);
-        optionalFields.add(optional);
+        nullableFields.add(nullable);
+        missableFields.add(missable);
     }
 
     public List<String> getFieldNames() {
@@ -71,8 +75,12 @@
         return fieldTypes;
     }
 
-    public List<Boolean> getOptionableFields() {
-        return optionalFields;
+    public List<Boolean> getNullableFields() {
+        return nullableFields;
+    }
+
+    public List<Boolean> getMissableFields() {
+        return missableFields;
     }
 
     public List<IRecordFieldDataGen> getFieldDataGen() {
@@ -102,7 +110,8 @@
 
     @Override
     public int hashCode() {
-        return Objects.hash(fieldDataGen, fieldNames, fieldTypes, optionalFields, recordKind, undeclaredFieldsDataGen);
+        return Objects.hash(fieldDataGen, fieldNames, fieldTypes, nullableFields, missableFields, recordKind,
+                undeclaredFieldsDataGen);
     }
 
     @Override
@@ -116,7 +125,8 @@
         }
         RecordTypeDefinition target = (RecordTypeDefinition) object;
         return fieldDataGen.equals(target.getFieldDataGen()) && fieldNames.equals(target.getFieldNames())
-                && fieldTypes.equals(target.getFieldTypes()) && optionalFields.equals(target.getOptionableFields())
+                && fieldTypes.equals(target.getFieldTypes()) && nullableFields.equals(target.getNullableFields())
+                && missableFields.equals(target.getMissableFields())
                 && Objects.equals(recordKind, target.getRecordKind())
                 && Objects.equals(undeclaredFieldsDataGen, target.getUndeclaredFieldsDataGen());
     }
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/FormatPrintVisitor.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/FormatPrintVisitor.java
index 7d78746..c9ec456 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/FormatPrintVisitor.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/FormatPrintVisitor.java
@@ -390,7 +390,8 @@
         out.println("{");
         Iterator<String> nameIter = r.getFieldNames().iterator();
         Iterator<TypeExpression> typeIter = r.getFieldTypes().iterator();
-        Iterator<Boolean> isOptionalIter = r.getOptionableFields().iterator();
+        Iterator<Boolean> isNullableIter = r.getNullableFields().iterator();
+        Iterator<Boolean> isMissableIter = r.getMissableFields().iterator();
         boolean first = true;
         while (nameIter.hasNext()) {
             if (first) {
@@ -400,10 +401,11 @@
             }
             String name = normalize(nameIter.next());
             TypeExpression texp = typeIter.next();
-            Boolean isNullable = isOptionalIter.next();
+            Boolean isNullable = isNullableIter.next();
+            Boolean isMissable = isMissableIter.next();
             out.print(skip(step) + name + " : ");
             texp.accept(this, step + 2);
-            if (isNullable) {
+            if (isNullable || isMissable) {
                 out.print("?");
             }
         }
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/QueryPrintVisitor.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/QueryPrintVisitor.java
index 1dfec2a..fd7ef7a 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/QueryPrintVisitor.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/QueryPrintVisitor.java
@@ -326,7 +326,8 @@
         out.println("RecordType {");
         Iterator<String> nameIter = r.getFieldNames().iterator();
         Iterator<TypeExpression> typeIter = r.getFieldTypes().iterator();
-        Iterator<Boolean> isOptionalIter = r.getOptionableFields().iterator();
+        Iterator<Boolean> isNullableIter = r.getNullableFields().iterator();
+        Iterator<Boolean> isMissableIter = r.getMissableFields().iterator();
         boolean first = true;
         while (nameIter.hasNext()) {
             if (first) {
@@ -336,10 +337,11 @@
             }
             String name = nameIter.next();
             TypeExpression texp = typeIter.next();
-            Boolean isNullable = isOptionalIter.next();
+            Boolean isNullable = isNullableIter.next();
+            Boolean isMissable = isMissableIter.next();
             out.print(skip(step + 1) + name + " : ");
             texp.accept(this, step + 2);
-            if (isNullable) {
+            if (isNullable || isMissable) {
                 out.print("?");
             }
         }
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj b/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj
index 17c94bd..ae1493a 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj
+++ b/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj
@@ -904,13 +904,13 @@
 {
   String fieldName;
   TypeExpression type = null;
-  boolean isUnknownable = true;
+  boolean nullable = true, missable = true;
 }
 {
   fieldName = Identifier()
-  type = TypeReference() ( <NOT> <NULL> { isUnknownable = false; } )?
+  type = TypeReference() ( <NOT> <UNKNOWN> { nullable = false; missable = false; } )?
   {
-    recType.addField(fieldName, type, isUnknownable);
+    recType.addField(fieldName, type, nullable, missable);
   }
 }
 
@@ -2206,7 +2206,7 @@
 {
   String fieldName;
   TypeExpression type = null;
-  boolean nullable = false;
+  boolean nullable = false, missable = false;
 }
 {
   fieldName = Identifier()
@@ -2216,9 +2216,9 @@
         SqlppHint.DATE_BETWEEN_YEARS_HINT, SqlppHint.DATETIME_ADD_RAND_HOURS_HINT, SqlppHint.AUTO_HINT);
       IRecordFieldDataGen rfdg = hintToken != null ? parseFieldDataGen(hintToken) : null;
     }
-  <COLON> type =  TypeExpr() (<QUES> { nullable = true; } )?
+  <COLON> type = TypeExpr() ( <QUES> { nullable = true; missable = true; } )?
     {
-      recType.addField(fieldName, type, nullable, rfdg);
+      recType.addField(fieldName, type, nullable, missable, rfdg);
     }
 }
 
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/MetadataRecordTypes.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/MetadataRecordTypes.java
index cbd02a0..3e8f3ba 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/MetadataRecordTypes.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/MetadataRecordTypes.java
@@ -69,6 +69,7 @@
     public static final String FIELD_NAME_INDEX_STRUCTURE = "IndexStructure";
     public static final String FIELD_NAME_INTERNAL_DETAILS = "InternalDetails";
     public static final String FIELD_NAME_IS_ANONYMOUS = "IsAnonymous";
+    public static final String FIELD_NAME_IS_MISSABLE = "IsMissable";
     public static final String FIELD_NAME_IS_NULLABLE = "IsNullable";
     public static final String FIELD_NAME_IS_OPEN = "IsOpen";
     public static final String FIELD_NAME_IS_PRIMARY = "IsPrimary";
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/BuiltinTypeMap.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/BuiltinTypeMap.java
index 4553124..e26dec7 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/BuiltinTypeMap.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/BuiltinTypeMap.java
@@ -27,7 +27,6 @@
 import org.apache.asterix.common.metadata.DataverseName;
 import org.apache.asterix.common.transactions.TxnId;
 import org.apache.asterix.metadata.MetadataNode;
-import org.apache.asterix.om.types.AUnionType;
 import org.apache.asterix.om.types.BuiltinType;
 import org.apache.asterix.om.types.IAType;
 import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
@@ -94,7 +93,7 @@
     }
 
     public static IAType getTypeFromTypeName(MetadataNode metadataNode, TxnId txnId, DataverseName dataverseName,
-            String typeName, boolean optional) throws AlgebricksException {
+            String typeName) throws AlgebricksException {
         IAType type = _builtinTypeMap.get(typeName);
         if (type == null) {
             Datatype dt = metadataNode.getDatatype(txnId, dataverseName, typeName);
@@ -102,9 +101,6 @@
                 type = dt.getDatatype();
             }
         }
-        if (optional) {
-            type = AUnionType.createUnknownableType(type);
-        }
         return type;
     }
 }
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/AbstractDatatypeTupleTranslator.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/AbstractDatatypeTupleTranslator.java
index 7a37597..60bd2c2 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/AbstractDatatypeTupleTranslator.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/AbstractDatatypeTupleTranslator.java
@@ -33,11 +33,11 @@
 import org.apache.asterix.om.base.ABoolean;
 import org.apache.asterix.om.types.AOrderedListType;
 import org.apache.asterix.om.types.ARecordType;
+import org.apache.asterix.om.types.ATypeTag;
 import org.apache.asterix.om.types.AUnionType;
 import org.apache.asterix.om.types.AbstractCollectionType;
 import org.apache.asterix.om.types.AbstractComplexType;
 import org.apache.asterix.om.types.IAType;
-import org.apache.asterix.om.utils.NonTaggedFormatUtil;
 import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
 import org.apache.hyracks.api.exceptions.ErrorCode;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
@@ -141,13 +141,15 @@
         listBuilder.reset(new AOrderedListType(MetadataRecordTypes.FIELD_RECORDTYPE, null));
 
         for (int i = 0, n = recType.getFieldNames().length; i < n; i++) {
-            String fieldName = recType.getFieldNames()[i];
             IAType fieldType = recType.getFieldTypes()[i];
-
             boolean fieldIsNullable = false;
-            if (NonTaggedFormatUtil.isOptional(fieldType)) {
-                fieldIsNullable = true;
-                fieldType = ((AUnionType) fieldType).getActualType();
+            boolean fieldIsMissable = false;
+
+            if (fieldType.getTypeTag() == ATypeTag.UNION) {
+                AUnionType fieldUnionType = (AUnionType) fieldType;
+                fieldIsNullable = fieldUnionType.isNullableType();
+                fieldIsMissable = fieldUnionType.isMissableType();
+                fieldType = fieldUnionType.getActualType();
             }
             if (fieldType.getTypeTag().isDerivedType()) {
                 handleNestedDerivedType(dataverseName, fieldType.getTypeName(), (AbstractComplexType) fieldType);
@@ -159,7 +161,7 @@
 
             // write field 0
             fieldValue.reset();
-            aString.setValue(fieldName);
+            aString.setValue(recType.getFieldNames()[i]);
             stringSerde.serialize(aString, fieldValue.getDataOutput());
             fieldRecordBuilder.addField(MetadataRecordTypes.FIELD_ARECORD_FIELDNAME_FIELD_INDEX, fieldValue);
 
@@ -174,6 +176,14 @@
             booleanSerde.serialize(ABoolean.valueOf(fieldIsNullable), fieldValue.getDataOutput());
             fieldRecordBuilder.addField(MetadataRecordTypes.FIELD_ARECORD_ISNULLABLE_FIELD_INDEX, fieldValue);
 
+            // write open fields
+            fieldName.reset();
+            aString.setValue(MetadataRecordTypes.FIELD_NAME_IS_MISSABLE);
+            stringSerde.serialize(aString, fieldName.getDataOutput());
+            fieldValue.reset();
+            booleanSerde.serialize(ABoolean.valueOf(fieldIsMissable), fieldValue.getDataOutput());
+            fieldRecordBuilder.addField(fieldName, fieldValue);
+
             // write record
             fieldRecordBuilder.write(itemValue.getDataOutput(), true);
 
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/DatatypeTupleTranslator.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/DatatypeTupleTranslator.java
index c77f8b6..454cc55 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/DatatypeTupleTranslator.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/DatatypeTupleTranslator.java
@@ -28,6 +28,7 @@
 import org.apache.asterix.metadata.bootstrap.MetadataRecordTypes;
 import org.apache.asterix.metadata.entities.BuiltinTypeMap;
 import org.apache.asterix.metadata.entities.Datatype;
+import org.apache.asterix.metadata.utils.TypeUtil;
 import org.apache.asterix.om.base.ABoolean;
 import org.apache.asterix.om.base.AOrderedList;
 import org.apache.asterix.om.base.ARecord;
@@ -35,8 +36,6 @@
 import org.apache.asterix.om.base.IACursor;
 import org.apache.asterix.om.types.AOrderedListType;
 import org.apache.asterix.om.types.ARecordType;
-import org.apache.asterix.om.types.ATypeTag;
-import org.apache.asterix.om.types.AUnionType;
 import org.apache.asterix.om.types.AUnorderedListType;
 import org.apache.asterix.om.types.AbstractComplexType;
 import org.apache.asterix.om.types.IAType;
@@ -98,10 +97,23 @@
                         fieldTypeName =
                                 ((AString) field.getValueByPos(MetadataRecordTypes.FIELD_ARECORD_FIELDTYPE_FIELD_INDEX))
                                         .getStringValue();
+
                         boolean isNullable = ((ABoolean) field
                                 .getValueByPos(MetadataRecordTypes.FIELD_ARECORD_ISNULLABLE_FIELD_INDEX)).getBoolean();
-                        fieldTypes[fieldId] = BuiltinTypeMap.getTypeFromTypeName(metadataNode, txnId, dataverseName,
-                                fieldTypeName, isNullable);
+                        int isMissableIdx = field.getType().getFieldIndex(MetadataRecordTypes.FIELD_NAME_IS_MISSABLE);
+                        boolean isMissable;
+                        if (isMissableIdx >= 0) {
+                            isMissable = ((ABoolean) field.getValueByPos(isMissableIdx)).getBoolean();
+                        } else {
+                            // back-compat
+                            // we previously stored 'isNullable' = true if type was 'unknowable',
+                            // or 'isNullable' = 'false' if the type was 'not unknowable'.
+                            isMissable = isNullable;
+                        }
+
+                        IAType fieldType =
+                                BuiltinTypeMap.getTypeFromTypeName(metadataNode, txnId, dataverseName, fieldTypeName);
+                        fieldTypes[fieldId] = TypeUtil.createQuantifiedType(fieldType, isNullable, isMissable);
                         fieldId++;
                     }
                     return new Datatype(dataverseName, datatypeName,
@@ -113,17 +125,16 @@
                                     .getStringValue();
                     return new Datatype(dataverseName, datatypeName,
                             new AUnorderedListType(BuiltinTypeMap.getTypeFromTypeName(metadataNode, txnId,
-                                    dataverseName, unorderedlistTypeName, false), datatypeName),
+                                    dataverseName, unorderedlistTypeName), datatypeName),
                             isAnonymous);
                 }
                 case ORDEREDLIST: {
                     String orderedlistTypeName = ((AString) derivedTypeRecord
                             .getValueByPos(MetadataRecordTypes.DERIVEDTYPE_ARECORD_ORDEREDLIST_FIELD_INDEX))
                                     .getStringValue();
-                    return new Datatype(dataverseName, datatypeName,
-                            new AOrderedListType(BuiltinTypeMap.getTypeFromTypeName(metadataNode, txnId, dataverseName,
-                                    orderedlistTypeName, false), datatypeName),
-                            isAnonymous);
+                    return new Datatype(dataverseName, datatypeName, new AOrderedListType(
+                            BuiltinTypeMap.getTypeFromTypeName(metadataNode, txnId, dataverseName, orderedlistTypeName),
+                            datatypeName), isAnonymous);
                 }
                 default:
                     throw new UnsupportedOperationException("Unsupported derived type: " + tag);
@@ -160,13 +171,8 @@
         stringSerde.serialize(aString, fieldValue.getDataOutput());
         recordBuilder.addField(MetadataRecordTypes.DATATYPE_ARECORD_DATATYPENAME_FIELD_INDEX, fieldValue);
 
+        // write field 2
         IAType fieldType = dataType.getDatatype();
-        // unwrap nullable type out of the union
-        if (fieldType.getTypeTag() == ATypeTag.UNION) {
-            fieldType = ((AUnionType) dataType.getDatatype()).getActualType();
-        }
-
-        // write field 3
         if (fieldType.getTypeTag().isDerivedType()) {
             fieldValue.reset();
             writeDerivedTypeRecord(dataType.getDataverseName(), (AbstractComplexType) fieldType,
@@ -174,7 +180,7 @@
             recordBuilder.addField(MetadataRecordTypes.DATATYPE_ARECORD_DERIVED_FIELD_INDEX, fieldValue);
         }
 
-        // write field 4
+        // write field 3
         fieldValue.reset();
         aString.setValue(Calendar.getInstance().getTime().toString());
         stringSerde.serialize(aString, fieldValue.getDataOutput());
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/FunctionTupleTranslator.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/FunctionTupleTranslator.java
index 14089c2..f4f6070 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/FunctionTupleTranslator.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/FunctionTupleTranslator.java
@@ -49,6 +49,7 @@
 import org.apache.asterix.metadata.bootstrap.MetadataRecordTypes;
 import org.apache.asterix.metadata.entities.BuiltinTypeMap;
 import org.apache.asterix.metadata.entities.Function;
+import org.apache.asterix.metadata.utils.TypeUtil;
 import org.apache.asterix.om.base.ABoolean;
 import org.apache.asterix.om.base.AOrderedList;
 import org.apache.asterix.om.base.ARecord;
@@ -157,9 +158,11 @@
 
     private IAType resolveType(DataverseName dataverseName, String typeName, Boolean isUnknownable)
             throws AlgebricksException {
+        //TODO(dmitry): revisit "isNullable"/"isMissable" for function paramters
         return BuiltinType.ANY.getTypeName().equalsIgnoreCase(typeName) ? BuiltinType.ANY
-                : BuiltinTypeMap.getTypeFromTypeName(metadataNode, txnId, dataverseName, typeName,
-                        isUnknownable != null ? isUnknownable : false);
+                : TypeUtil.createQuantifiedType(
+                        BuiltinTypeMap.getTypeFromTypeName(metadataNode, txnId, dataverseName, typeName), isUnknownable,
+                        isUnknownable);
     }
 
     private List<IAType> getArgTypes(ARecord functionRecord, DataverseName dataverseName, int arity)
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/IndexTupleTranslator.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/IndexTupleTranslator.java
index 5d16f56..79ce2a4 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/IndexTupleTranslator.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/IndexTupleTranslator.java
@@ -134,7 +134,7 @@
         List<IAType> searchKeyType = new ArrayList<>(searchKey.size());
         while (fieldTypeCursor.next()) {
             String typeName = ((AString) fieldTypeCursor.get()).getStringValue();
-            IAType fieldType = BuiltinTypeMap.getTypeFromTypeName(metadataNode, txnId, dataverseName, typeName, false);
+            IAType fieldType = BuiltinTypeMap.getTypeFromTypeName(metadataNode, txnId, dataverseName, typeName);
             searchKeyType.add(fieldType);
         }
         boolean isOverridingKeyTypes = !searchKeyType.isEmpty();
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/TypeUtil.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/TypeUtil.java
index efe795b..4c3ad73 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/TypeUtil.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/TypeUtil.java
@@ -212,4 +212,32 @@
                     "Field accessor is not defined for \"" + fName + "\" of type " + actualType.getTypeTag());
         }
     }
+
+    /**
+     * Warning: this is not a general-purpose method.
+     * Use only when processing types stored in metadata.
+     * Doesn't properly handle ANY, UNION, NULL and MISSING types.
+     * Allows {@code null} type reference which will be filled later during type translation.
+     */
+    public static IAType createQuantifiedType(IAType primeType, boolean nullable, boolean missable) {
+        if (primeType != null) {
+            switch (primeType.getTypeTag()) {
+                case ANY:
+                case UNION:
+                case NULL:
+                case MISSING:
+                    throw new IllegalArgumentException(primeType.getDisplayName());
+            }
+        }
+
+        IAType resType = primeType;
+        if (nullable && missable) {
+            resType = AUnionType.createUnknownableType(resType);
+        } else if (nullable) {
+            resType = AUnionType.createNullableType(resType);
+        } else if (missable) {
+            resType = AUnionType.createMissableType(resType);
+        }
+        return resType;
+    }
 }