This is an automated email from the ASF dual-hosted git repository. dlych pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/asterixdb.git
commit 3a628026539d14b0dd5ab67d0034e121e0da80a7 Author: Dmitry Lychagin <[email protected]> AuthorDate: Tue May 12 18:09:02 2020 -0700 [NO ISSUE][COMP] Rename NOT NULL to NOT UNKNOWN - user model changes: yes - storage format changes: no - interface changes: no Details: - Rename NOT NULL type quantifier to NOT UNKNOWN in CREATE DATASET type specification - Add IsMissable field to datatype metadata to support storing all possible NULL/MISSING combinations Change-Id: Ia7f22ba5d212e3b1824fafb571e1724f2fd25ea9 Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/6306 Integration-Tests: Jenkins <[email protected]> Tested-by: Jenkins <[email protected]> Reviewed-by: Ali Alsuliman <[email protected]> --- .../apache/asterix/translator/TypeTranslator.java | 31 ++--- .../meta03/builtin_type/meta03_builtin_type.1.adm | 2 +- .../meta03_builtin_type_nullable.1.adm | 2 +- .../ordered_list/meta03_ordered_list.1.adm | 2 +- .../meta03_ordered_list_nullable.1.adm | 2 +- .../meta03/complex_type/record/meta03_record.1.adm | 2 +- .../record_nullable/meta03_record_nullable.1.adm | 2 +- .../unordered_list/meta03_unordered_list.1.adm | 2 +- .../meta03_unordered_list_nullable.1.adm | 2 +- .../meta04/builtin_type/meta04_builtin_type.1.adm | 2 +- .../meta04_builtin_type_nullable.1.adm | 2 +- .../ordered_list/meta04_ordered_list.1.adm | 2 +- .../meta04_ordered_list_nullable.1.adm | 2 +- .../meta04/complex_type/record/meta04_record.1.adm | 2 +- .../record_nullable/meta04_record_nullable.1.adm | 2 +- .../unordered_list/meta04_unordered_list.1.adm | 2 +- .../meta04_unordered_list_nullable.1.adm | 2 +- .../metadata_datatype/metadata_datatype.1.adm | 140 ++++++++++----------- .../verify_failure_previous_success.1.adm | 20 +-- .../queries/group-by/gby-case-01.3.sqlpp | 2 +- .../queries/group-by/gby-case-01.4.sqlpp | 2 +- .../create-dataset-inline-type-1.1.ddl.sqlpp | 78 ++++++------ .../create-dataset-inline-type-2.1.ddl.sqlpp | 8 +- .../create-dataset-inline-type-2.4.ddl.sqlpp | 4 +- .../group-by/gby-case-01/gby-case-01.1.ddl.sqlpp | 2 +- .../gby-nested-01/gby-nested-01.1.ddl.sqlpp | 4 +- .../create-dataset-inline-type-1.2.adm | 24 ++-- .../create-drop-cltype/create-drop-cltype.1.adm | 2 +- .../create-drop-opntype/create-drop-opntype.1.adm | 2 +- .../results/types/any-object/any-object.2.adm | 4 +- asterixdb/asterix-lang-aql/src/main/javacc/AQL.jj | 6 +- .../common/expression/RecordTypeDefinition.java | 28 +++-- .../lang/common/visitor/FormatPrintVisitor.java | 8 +- .../lang/common/visitor/QueryPrintVisitor.java | 8 +- .../asterix-lang-sqlpp/src/main/javacc/SQLPP.jj | 12 +- .../metadata/bootstrap/MetadataRecordTypes.java | 1 + .../asterix/metadata/entities/BuiltinTypeMap.java | 6 +- .../DatatypeTupleTranslator.java | 69 ++++++---- .../IndexTupleTranslator.java | 2 +- .../apache/asterix/metadata/utils/TypeUtil.java | 28 +++++ 40 files changed, 285 insertions(+), 238 deletions(-) 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 9c6e75e..cdb6346 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 @@ -40,6 +40,7 @@ import org.apache.asterix.metadata.MetadataTransactionContext; 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; @@ -343,50 +344,35 @@ public class TypeTranslator { 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 = new TypeSignature( tre.getIdent().first == null ? defaultDataverse : tre.getIdent().first.getValue(), tre.getIdent().second.getValue()); - 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: { @@ -394,6 +380,9 @@ public class TypeTranslator { } } + 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 5fc2c1e..5755493 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,70 +1,70 @@ -{ "DataverseName": "Metadata", "DatatypeName": "AnyObject", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": true, "Fields": [ ] } }, "Timestamp": "Mon Jan 08 10:27:05 PST 2018" } -{ "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": "Mon Jan 08 10:27:04 PST 2018" } -{ "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": [...] -{ "DataverseName": "Metadata", "DatatypeName": "DatasetRecordType_CompactionPolicyProperties", "Derived": { "Tag": "ORDEREDLIST", "IsAnonymous": true, "OrderedList": "DatasetRecordType_CompactionPolicyProperties_Item" }, "Timestamp": "Mon Jan 08 10:27:04 PST 2018" } -{ "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": "Mon Jan 08 10:27:04 PST 2018" } -{ "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", "Fiel [...] -{ "DataverseName": "Metadata", "DatatypeName": "DatasetRecordType_ExternalDetails_Properties", "Derived": { "Tag": "ORDEREDLIST", "IsAnonymous": true, "OrderedList": "DatasetRecordType_ExternalDetails_Properties_Item" }, "Timestamp": "Mon Jan 08 10:27:04 PST 2018" } -{ "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": "Mon Jan 08 10:27:04 PST 2018" } -{ "DataverseName": "Metadata", "DatatypeName": "DatasetRecordType_Hints", "Derived": { "Tag": "UNORDEREDLIST", "IsAnonymous": true, "UnorderedList": "DatasetRecordType_Hints_Item" }, "Timestamp": "Mon Jan 08 10:27:04 PST 2018" } -{ "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": "Mon Jan 08 10:27:04 PST 2018" } -{ "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", "F [...] -{ "DataverseName": "Metadata", "DatatypeName": "DatasetRecordType_InternalDetails_PartitioningKey", "Derived": { "Tag": "ORDEREDLIST", "IsAnonymous": true, "OrderedList": "DatasetRecordType_InternalDetails_PartitioningKey_Item" }, "Timestamp": "Mon Jan 08 10:27:04 PST 2018" } -{ "DataverseName": "Metadata", "DatatypeName": "DatasetRecordType_InternalDetails_PartitioningKey_Item", "Derived": { "Tag": "ORDEREDLIST", "IsAnonymous": true, "OrderedList": "string" }, "Timestamp": "Mon Jan 08 10:27:04 PST 2018" } -{ "DataverseName": "Metadata", "DatatypeName": "DatasetRecordType_InternalDetails_PrimaryKey", "Derived": { "Tag": "ORDEREDLIST", "IsAnonymous": true, "OrderedList": "DatasetRecordType_InternalDetails_PrimaryKey_Item" }, "Timestamp": "Mon Jan 08 10:27:04 PST 2018" } -{ "DataverseName": "Metadata", "DatatypeName": "DatasetRecordType_InternalDetails_PrimaryKey_Item", "Derived": { "Tag": "ORDEREDLIST", "IsAnonymous": true, "OrderedList": "string" }, "Timestamp": "Mon Jan 08 10:27:04 PST 2018" } -{ "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", "Fie [...] -{ "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 } ] } }, "Time [...] -{ "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 }, { "Fi [...] -{ "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": "Mon Jan 08 10:27:04 PST 2018" } -{ "DataverseName": "Metadata", "DatatypeName": "DatatypeRecordType_Derived_Record_Fields", "Derived": { "Tag": "ORDEREDLIST", "IsAnonymous": true, "OrderedList": "DatatypeRecordType_Derived_Record_Fields_Item" }, "Timestamp": "Mon Jan 08 10:27:04 PST 2018" } -{ "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": "Mon Jan 08 10:27:04 PST 2018" } -{ "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": "Mon Jan 08 [...] -{ "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", [...] -{ "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": "Applied [...] -{ "DataverseName": "Metadata", "DatatypeName": "FeedConnectionRecordType_AppliedFunctions", "Derived": { "Tag": "UNORDEREDLIST", "IsAnonymous": true, "UnorderedList": "string" }, "Timestamp": "Mon Jan 08 10:27:04 PST 2018" } -{ "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 } ] [...] -{ "DataverseName": "Metadata", "DatatypeName": "FeedPolicyRecordType_Properties", "Derived": { "Tag": "UNORDEREDLIST", "IsAnonymous": true, "UnorderedList": "FeedPolicyRecordType_Properties_Item" }, "Timestamp": "Mon Jan 08 10:27:04 PST 2018" } -{ "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": "Mon Jan 08 10:27:04 PST 2018" } -{ "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 [...] -{ "DataverseName": "Metadata", "DatatypeName": "FeedRecordType_AdapterConfiguration", "Derived": { "Tag": "UNORDEREDLIST", "IsAnonymous": true, "UnorderedList": "FeedRecordType_AdapterConfiguration_Item" }, "Timestamp": "Mon Jan 08 10:27:04 PST 2018" } -{ "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": "Mon Jan 08 10:27:04 PST 2018" } -{ "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": "ReturnTy [...] -{ "DataverseName": "Metadata", "DatatypeName": "FunctionRecordType_Dependencies", "Derived": { "Tag": "ORDEREDLIST", "IsAnonymous": true, "OrderedList": "FunctionRecordType_Dependencies_Item" }, "Timestamp": "Mon Jan 08 10:27:04 PST 2018" } -{ "DataverseName": "Metadata", "DatatypeName": "FunctionRecordType_Dependencies_Item", "Derived": { "Tag": "ORDEREDLIST", "IsAnonymous": true, "OrderedList": "FunctionRecordType_Dependencies_Item_Item" }, "Timestamp": "Mon Jan 08 10:27:04 PST 2018" } -{ "DataverseName": "Metadata", "DatatypeName": "FunctionRecordType_Dependencies_Item_Item", "Derived": { "Tag": "ORDEREDLIST", "IsAnonymous": true, "OrderedList": "string" }, "Timestamp": "Mon Jan 08 10:27:04 PST 2018" } -{ "DataverseName": "Metadata", "DatatypeName": "FunctionRecordType_Params", "Derived": { "Tag": "ORDEREDLIST", "IsAnonymous": true, "OrderedList": "string" }, "Timestamp": "Mon Jan 08 10:27:04 PST 2018" } -{ "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", [...] -{ "DataverseName": "Metadata", "DatatypeName": "IndexRecordType_SearchKey", "Derived": { "Tag": "ORDEREDLIST", "IsAnonymous": true, "OrderedList": "IndexRecordType_SearchKey_Item" }, "Timestamp": "Mon Jan 08 10:27:04 PST 2018" } -{ "DataverseName": "Metadata", "DatatypeName": "IndexRecordType_SearchKey_Item", "Derived": { "Tag": "ORDEREDLIST", "IsAnonymous": true, "OrderedList": "string" }, "Timestamp": "Mon Jan 08 10:27:04 PST 2018" } -{ "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": "Mon Jan 08 10:27:04 PST 2018" } -{ "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": "Mon Jan 08 10:27:04 PST 2018" } -{ "DataverseName": "Metadata", "DatatypeName": "NodeGroupRecordType_NodeNames", "Derived": { "Tag": "UNORDEREDLIST", "IsAnonymous": true, "UnorderedList": "string" }, "Timestamp": "Mon Jan 08 10:27:04 PST 2018" } -{ "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": "Mon Jan 08 10:27:04 PST 2018" } -{ "DataverseName": "Metadata", "DatatypeName": "binary", "Timestamp": "Mon Jan 08 10:27:04 PST 2018" } -{ "DataverseName": "Metadata", "DatatypeName": "boolean", "Timestamp": "Mon Jan 08 10:27:04 PST 2018" } -{ "DataverseName": "Metadata", "DatatypeName": "circle", "Timestamp": "Mon Jan 08 10:27:04 PST 2018" } -{ "DataverseName": "Metadata", "DatatypeName": "date", "Timestamp": "Mon Jan 08 10:27:04 PST 2018" } -{ "DataverseName": "Metadata", "DatatypeName": "datetime", "Timestamp": "Mon Jan 08 10:27:04 PST 2018" } -{ "DataverseName": "Metadata", "DatatypeName": "day-time-duration", "Timestamp": "Mon Jan 08 10:27:04 PST 2018" } -{ "DataverseName": "Metadata", "DatatypeName": "double", "Timestamp": "Mon Jan 08 10:27:04 PST 2018" } -{ "DataverseName": "Metadata", "DatatypeName": "duration", "Timestamp": "Mon Jan 08 10:27:04 PST 2018" } -{ "DataverseName": "Metadata", "DatatypeName": "float", "Timestamp": "Mon Jan 08 10:27:04 PST 2018" } -{ "DataverseName": "Metadata", "DatatypeName": "geometry", "Timestamp": "Mon Jan 08 10:27:04 PST 2018" } -{ "DataverseName": "Metadata", "DatatypeName": "int16", "Timestamp": "Mon Jan 08 10:27:04 PST 2018" } -{ "DataverseName": "Metadata", "DatatypeName": "int32", "Timestamp": "Mon Jan 08 10:27:04 PST 2018" } -{ "DataverseName": "Metadata", "DatatypeName": "int64", "Timestamp": "Mon Jan 08 10:27:04 PST 2018" } -{ "DataverseName": "Metadata", "DatatypeName": "int8", "Timestamp": "Mon Jan 08 10:27:04 PST 2018" } -{ "DataverseName": "Metadata", "DatatypeName": "interval", "Timestamp": "Mon Jan 08 10:27:04 PST 2018" } -{ "DataverseName": "Metadata", "DatatypeName": "line", "Timestamp": "Mon Jan 08 10:27:04 PST 2018" } -{ "DataverseName": "Metadata", "DatatypeName": "missing", "Timestamp": "Mon Jan 08 10:27:04 PST 2018" } -{ "DataverseName": "Metadata", "DatatypeName": "null", "Timestamp": "Mon Jan 08 10:27:04 PST 2018" } -{ "DataverseName": "Metadata", "DatatypeName": "point", "Timestamp": "Mon Jan 08 10:27:04 PST 2018" } -{ "DataverseName": "Metadata", "DatatypeName": "point3d", "Timestamp": "Mon Jan 08 10:27:04 PST 2018" } -{ "DataverseName": "Metadata", "DatatypeName": "polygon", "Timestamp": "Mon Jan 08 10:27:04 PST 2018" } -{ "DataverseName": "Metadata", "DatatypeName": "rectangle", "Timestamp": "Mon Jan 08 10:27:04 PST 2018" } -{ "DataverseName": "Metadata", "DatatypeName": "shortwithouttypeinfo", "Timestamp": "Mon Jan 08 10:27:04 PST 2018" } -{ "DataverseName": "Metadata", "DatatypeName": "string", "Timestamp": "Mon Jan 08 10:27:04 PST 2018" } -{ "DataverseName": "Metadata", "DatatypeName": "time", "Timestamp": "Mon Jan 08 10:27:04 PST 2018" } -{ "DataverseName": "Metadata", "DatatypeName": "uuid", "Timestamp": "Mon Jan 08 10:27:04 PST 2018" } -{ "DataverseName": "Metadata", "DatatypeName": "year-month-duration", "Timestamp": "Mon Jan 08 10:27:04 PST 2018" } \ No newline at end of file +{ "DataverseName": "Metadata", "DatatypeName": "AnyObject", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": true, "Fields": [ ] } }, "Timestamp": "Fri May 08 17:24:56 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": "Fri May [...] +{ "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" [...] +{ "DataverseName": "Metadata", "DatatypeName": "DatasetRecordType_CompactionPolicyProperties", "Derived": { "Tag": "ORDEREDLIST", "IsAnonymous": true, "OrderedList": "DatasetRecordType_CompactionPolicyProperties_Item" }, "Timestamp": "Fri May 08 17:24:56 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": "Fri May 08 17:24:56 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, [...] +{ "DataverseName": "Metadata", "DatatypeName": "DatasetRecordType_ExternalDetails_Properties", "Derived": { "Tag": "ORDEREDLIST", "IsAnonymous": true, "OrderedList": "DatasetRecordType_ExternalDetails_Properties_Item" }, "Timestamp": "Fri May 08 17:24:56 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": "Fri May 08 17:24:56 PDT 2020" } +{ "DataverseName": "Metadata", "DatatypeName": "DatasetRecordType_Hints", "Derived": { "Tag": "UNORDEREDLIST", "IsAnonymous": true, "UnorderedList": "DatasetRecordType_Hints_Item" }, "Timestamp": "Fri May 08 17:24:56 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": "Fri May 08 17:24:56 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" [...] +{ "DataverseName": "Metadata", "DatatypeName": "DatasetRecordType_InternalDetails_PartitioningKey", "Derived": { "Tag": "ORDEREDLIST", "IsAnonymous": true, "OrderedList": "DatasetRecordType_InternalDetails_PartitioningKey_Item" }, "Timestamp": "Fri May 08 17:24:56 PDT 2020" } +{ "DataverseName": "Metadata", "DatatypeName": "DatasetRecordType_InternalDetails_PartitioningKey_Item", "Derived": { "Tag": "ORDEREDLIST", "IsAnonymous": true, "OrderedList": "string" }, "Timestamp": "Fri May 08 17:24:56 PDT 2020" } +{ "DataverseName": "Metadata", "DatatypeName": "DatasetRecordType_InternalDetails_PrimaryKey", "Derived": { "Tag": "ORDEREDLIST", "IsAnonymous": true, "OrderedList": "DatasetRecordType_InternalDetails_PrimaryKey_Item" }, "Timestamp": "Fri May 08 17:24:56 PDT 2020" } +{ "DataverseName": "Metadata", "DatatypeName": "DatasetRecordType_InternalDetails_PrimaryKey_Item", "Derived": { "Tag": "ORDEREDLIST", "IsAnonymous": true, "OrderedList": "string" }, "Timestamp": "Fri May 08 17:24:56 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": "s [...] +{ "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": "Timesta [...] +{ "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": "Unor [...] +{ "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": "Fri May 08 17:24:56 PDT 2020" } +{ "DataverseName": "Metadata", "DatatypeName": "DatatypeRecordType_Derived_Record_Fields", "Derived": { "Tag": "ORDEREDLIST", "IsAnonymous": true, "OrderedList": "DatatypeRecordType_Derived_Record_Fields_Item" }, "Timestamp": "Fri May 08 17:24:56 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": [...] +{ "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": [...] +{ "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", "FieldTyp [...] +{ "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", "Field [...] +{ "DataverseName": "Metadata", "DatatypeName": "FeedConnectionRecordType_AppliedFunctions", "Derived": { "Tag": "UNORDEREDLIST", "IsAnonymous": true, "UnorderedList": "string" }, "Timestamp": "Fri May 08 17:24:56 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", "FieldTy [...] +{ "DataverseName": "Metadata", "DatatypeName": "FeedPolicyRecordType_Properties", "Derived": { "Tag": "UNORDEREDLIST", "IsAnonymous": true, "UnorderedList": "FeedPolicyRecordType_Properties_Item" }, "Timestamp": "Fri May 08 17:24:56 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": "Fri May 08 17:24:56 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 }, { "Fiel [...] +{ "DataverseName": "Metadata", "DatatypeName": "FeedRecordType_AdapterConfiguration", "Derived": { "Tag": "UNORDEREDLIST", "IsAnonymous": true, "UnorderedList": "FeedRecordType_AdapterConfiguration_Item" }, "Timestamp": "Fri May 08 17:24:56 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": "Fri May 08 17:24:56 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": "FunctionReco [...] +{ "DataverseName": "Metadata", "DatatypeName": "FunctionRecordType_Dependencies", "Derived": { "Tag": "ORDEREDLIST", "IsAnonymous": true, "OrderedList": "FunctionRecordType_Dependencies_Item" }, "Timestamp": "Fri May 08 17:24:56 PDT 2020" } +{ "DataverseName": "Metadata", "DatatypeName": "FunctionRecordType_Dependencies_Item", "Derived": { "Tag": "ORDEREDLIST", "IsAnonymous": true, "OrderedList": "FunctionRecordType_Dependencies_Item_Item" }, "Timestamp": "Fri May 08 17:24:56 PDT 2020" } +{ "DataverseName": "Metadata", "DatatypeName": "FunctionRecordType_Dependencies_Item_Item", "Derived": { "Tag": "ORDEREDLIST", "IsAnonymous": true, "OrderedList": "string" }, "Timestamp": "Fri May 08 17:24:56 PDT 2020" } +{ "DataverseName": "Metadata", "DatatypeName": "FunctionRecordType_Params", "Derived": { "Tag": "ORDEREDLIST", "IsAnonymous": true, "OrderedList": "string" }, "Timestamp": "Fri May 08 17:24:56 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 [...] +{ "DataverseName": "Metadata", "DatatypeName": "IndexRecordType_SearchKey", "Derived": { "Tag": "ORDEREDLIST", "IsAnonymous": true, "OrderedList": "IndexRecordType_SearchKey_Item" }, "Timestamp": "Fri May 08 17:24:56 PDT 2020" } +{ "DataverseName": "Metadata", "DatatypeName": "IndexRecordType_SearchKey_Item", "Derived": { "Tag": "ORDEREDLIST", "IsAnonymous": true, "OrderedList": "string" }, "Timestamp": "Fri May 08 17:24:56 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": "Fri May 08 17:24:56 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": "Fr [...] +{ "DataverseName": "Metadata", "DatatypeName": "NodeGroupRecordType_NodeNames", "Derived": { "Tag": "UNORDEREDLIST", "IsAnonymous": true, "UnorderedList": "string" }, "Timestamp": "Fri May 08 17:24:56 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": "Fri May 08 17:24:56 P [...] +{ "DataverseName": "Metadata", "DatatypeName": "binary", "Timestamp": "Fri May 08 17:24:56 PDT 2020" } +{ "DataverseName": "Metadata", "DatatypeName": "boolean", "Timestamp": "Fri May 08 17:24:56 PDT 2020" } +{ "DataverseName": "Metadata", "DatatypeName": "circle", "Timestamp": "Fri May 08 17:24:56 PDT 2020" } +{ "DataverseName": "Metadata", "DatatypeName": "date", "Timestamp": "Fri May 08 17:24:56 PDT 2020" } +{ "DataverseName": "Metadata", "DatatypeName": "datetime", "Timestamp": "Fri May 08 17:24:56 PDT 2020" } +{ "DataverseName": "Metadata", "DatatypeName": "day-time-duration", "Timestamp": "Fri May 08 17:24:56 PDT 2020" } +{ "DataverseName": "Metadata", "DatatypeName": "double", "Timestamp": "Fri May 08 17:24:56 PDT 2020" } +{ "DataverseName": "Metadata", "DatatypeName": "duration", "Timestamp": "Fri May 08 17:24:56 PDT 2020" } +{ "DataverseName": "Metadata", "DatatypeName": "float", "Timestamp": "Fri May 08 17:24:56 PDT 2020" } +{ "DataverseName": "Metadata", "DatatypeName": "geometry", "Timestamp": "Fri May 08 17:24:56 PDT 2020" } +{ "DataverseName": "Metadata", "DatatypeName": "int16", "Timestamp": "Fri May 08 17:24:56 PDT 2020" } +{ "DataverseName": "Metadata", "DatatypeName": "int32", "Timestamp": "Fri May 08 17:24:56 PDT 2020" } +{ "DataverseName": "Metadata", "DatatypeName": "int64", "Timestamp": "Fri May 08 17:24:56 PDT 2020" } +{ "DataverseName": "Metadata", "DatatypeName": "int8", "Timestamp": "Fri May 08 17:24:56 PDT 2020" } +{ "DataverseName": "Metadata", "DatatypeName": "interval", "Timestamp": "Fri May 08 17:24:56 PDT 2020" } +{ "DataverseName": "Metadata", "DatatypeName": "line", "Timestamp": "Fri May 08 17:24:56 PDT 2020" } +{ "DataverseName": "Metadata", "DatatypeName": "missing", "Timestamp": "Fri May 08 17:24:56 PDT 2020" } +{ "DataverseName": "Metadata", "DatatypeName": "null", "Timestamp": "Fri May 08 17:24:56 PDT 2020" } +{ "DataverseName": "Metadata", "DatatypeName": "point", "Timestamp": "Fri May 08 17:24:56 PDT 2020" } +{ "DataverseName": "Metadata", "DatatypeName": "point3d", "Timestamp": "Fri May 08 17:24:56 PDT 2020" } +{ "DataverseName": "Metadata", "DatatypeName": "polygon", "Timestamp": "Fri May 08 17:24:56 PDT 2020" } +{ "DataverseName": "Metadata", "DatatypeName": "rectangle", "Timestamp": "Fri May 08 17:24:56 PDT 2020" } +{ "DataverseName": "Metadata", "DatatypeName": "shortwithouttypeinfo", "Timestamp": "Fri May 08 17:24:56 PDT 2020" } +{ "DataverseName": "Metadata", "DatatypeName": "string", "Timestamp": "Fri May 08 17:24:56 PDT 2020" } +{ "DataverseName": "Metadata", "DatatypeName": "time", "Timestamp": "Fri May 08 17:24:56 PDT 2020" } +{ "DataverseName": "Metadata", "DatatypeName": "uuid", "Timestamp": "Fri May 08 17:24:56 PDT 2020" } +{ "DataverseName": "Metadata", "DatatypeName": "year-month-duration", "Timestamp": "Fri May 08 17:24:56 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_inte [...] -{ "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", "IsNul [...] -{ "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": fals [...] +{ "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, [...] +{ "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": [...] +{ "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 @@ create dataverse test; 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 @@ create dataverse test; 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 @@ CREATE FUNCTION listMetadata() { /* 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 @@ CREATE DATASET A_Customers_Open( /* 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 @@ USING `localfs` (`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 @@ USING `localfs` (`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 @@ USING `localfs` /* 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 @@ USE test; /* 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 @@ create dataverse test; 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 @@ create dataverse test; 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", "Field [...] -{ "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" [...] -{ "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", "FieldTyp [...] -{ "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", "IsNull [...] +{ "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", [...] +{ "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", "IsNullabl [...] +{ "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": "doubl [...] +{ "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" [...] +{ "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", [...] +{ "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", "I [...] +{ "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": "str [...] +{ "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", "IsNu [...] +{ "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 [...] +{ "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, "IsMissa [...] 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 [...] +{ "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, "IsMissab [...] 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-lang-aql/src/main/javacc/AQL.jj b/asterixdb/asterix-lang-aql/src/main/javacc/AQL.jj index 9b54562..127dc62 100644 --- a/asterixdb/asterix-lang-aql/src/main/javacc/AQL.jj +++ b/asterixdb/asterix-lang-aql/src/main/javacc/AQL.jj @@ -1362,7 +1362,7 @@ void RecordField(RecordTypeDefinition recType) throws ParseException: { String fieldName; TypeExpression type = null; - boolean nullable = false; + boolean nullable = false, missable = false; } { fieldName = Identifier() @@ -1370,9 +1370,9 @@ void RecordField(RecordTypeDefinition recType) throws ParseException: 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 @@ public class RecordTypeDefinition extends AbstractTypeExpression { 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 @@ public class RecordTypeDefinition extends AbstractTypeExpression { 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 @@ public class RecordTypeDefinition extends AbstractTypeExpression { 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 @@ public class RecordTypeDefinition extends AbstractTypeExpression { @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 @@ public class RecordTypeDefinition extends AbstractTypeExpression { } 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 c123348..28a7be2 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 @@ -415,7 +415,8 @@ public class FormatPrintVisitor implements ILangVisitor<Void, Integer> { 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) { @@ -425,10 +426,11 @@ public class FormatPrintVisitor implements ILangVisitor<Void, Integer> { } 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 5b8c9c0..0828aba 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 @@ -347,7 +347,8 @@ public abstract class QueryPrintVisitor extends AbstractQueryExpressionVisitor<V 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) { @@ -357,10 +358,11 @@ public abstract class QueryPrintVisitor extends AbstractQueryExpressionVisitor<V } 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 5aa45bc..107e240 100644 --- a/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj +++ b/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj @@ -804,13 +804,13 @@ void DatasetRecordField(RecordTypeDefinition recType) throws ParseException: { 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); } } @@ -1702,7 +1702,7 @@ void RecordField(RecordTypeDefinition recType) throws ParseException: { String fieldName; TypeExpression type = null; - boolean nullable = false; + boolean nullable = false, missable = false; } { fieldName = Identifier() @@ -1712,9 +1712,9 @@ void RecordField(RecordTypeDefinition recType) throws ParseException: 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 7fdbfcf..f8148ab 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 @@ -68,6 +68,7 @@ public final class MetadataRecordTypes { 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 14f76eb..d2284b9 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 @@ -28,7 +28,6 @@ import java.util.Set; import org.apache.asterix.common.exceptions.MetadataException; 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; @@ -95,7 +94,7 @@ public class BuiltinTypeMap { } public static IAType getTypeFromTypeName(MetadataNode metadataNode, TxnId txnId, String dataverseName, - String typeName, boolean optional) throws AlgebricksException { + String typeName) throws AlgebricksException { IAType type = _builtinTypeMap.get(typeName); if (type == null) { try { @@ -105,9 +104,6 @@ public class BuiltinTypeMap { throw new MetadataException(e); } } - if (optional) { - type = AUnionType.createUnknownableType(type); - } return type; } } 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 32951d5..52dd3fd 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 @@ -36,6 +36,7 @@ import org.apache.asterix.metadata.bootstrap.MetadataPrimaryIndexes; 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; @@ -49,7 +50,6 @@ import org.apache.asterix.om.types.AUnorderedListType; 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.dataflow.value.ISerializerDeserializer; import org.apache.hyracks.api.exceptions.ErrorCode; @@ -82,6 +82,7 @@ public class DatatypeTupleTranslator extends AbstractTupleTranslator<Datatype> { SerializerDeserializerProvider.INSTANCE.getSerializerDeserializer(MetadataRecordTypes.DATATYPE_RECORDTYPE); private final MetadataNode metadataNode; private final TxnId txnId; + protected final transient ArrayBackedValueStorage fieldName = new ArrayBackedValueStorage(); protected DatatypeTupleTranslator(TxnId txnId, MetadataNode metadataNode, boolean getTuple) { super(getTuple, MetadataPrimaryIndexes.DATATYPE_DATASET.getFieldCount()); @@ -123,8 +124,7 @@ public class DatatypeTupleTranslator extends AbstractTupleTranslator<Datatype> { ARecord recordType = (ARecord) derivedTypeRecord .getValueByPos(MetadataRecordTypes.DERIVEDTYPE_ARECORD_RECORD_FIELD_INDEX); boolean isOpen = ((ABoolean) recordType - .getValueByPos(MetadataRecordTypes.RECORDTYPE_ARECORD_ISOPEN_FIELD_INDEX)).getBoolean() - .booleanValue(); + .getValueByPos(MetadataRecordTypes.RECORDTYPE_ARECORD_ISOPEN_FIELD_INDEX)).getBoolean(); int numberOfFields = ((AOrderedList) recordType .getValueByPos(MetadataRecordTypes.RECORDTYPE_ARECORD_FIELDS_FIELD_INDEX)).size(); IACursor cursor = ((AOrderedList) recordType @@ -141,11 +141,24 @@ public class DatatypeTupleTranslator extends AbstractTupleTranslator<Datatype> { fieldTypeName = ((AString) field.getValueByPos(MetadataRecordTypes.FIELD_ARECORD_FIELDTYPE_FIELD_INDEX)) .getStringValue(); + boolean isNullable = ((ABoolean) field - .getValueByPos(MetadataRecordTypes.FIELD_ARECORD_ISNULLABLE_FIELD_INDEX)).getBoolean() - .booleanValue(); - fieldTypes[fieldId] = BuiltinTypeMap.getTypeFromTypeName(metadataNode, txnId, dataverseName, - fieldTypeName, isNullable); + .getValueByPos(MetadataRecordTypes.FIELD_ARECORD_ISNULLABLE_FIELD_INDEX)).getBoolean(); + + 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, @@ -157,17 +170,16 @@ public class DatatypeTupleTranslator extends AbstractTupleTranslator<Datatype> { .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); @@ -203,20 +215,15 @@ public class DatatypeTupleTranslator extends AbstractTupleTranslator<Datatype> { 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, (AbstractComplexType) fieldType, fieldValue.getDataOutput()); 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()); @@ -232,7 +239,7 @@ public class DatatypeTupleTranslator extends AbstractTupleTranslator<Datatype> { private void writeDerivedTypeRecord(Datatype type, AbstractComplexType derivedDatatype, DataOutput out) throws HyracksDataException { - DerivedTypeTag tag = null; + DerivedTypeTag tag; IARecordBuilder derivedRecordBuilder = new RecordBuilder(); ArrayBackedValueStorage fieldValue = new ArrayBackedValueStorage(); switch (derivedDatatype.getTypeTag()) { @@ -260,7 +267,7 @@ public class DatatypeTupleTranslator extends AbstractTupleTranslator<Datatype> { // write field 1 fieldValue.reset(); - booleanSerde.serialize(type.getIsAnonymous() ? ABoolean.TRUE : ABoolean.FALSE, fieldValue.getDataOutput()); + booleanSerde.serialize(ABoolean.valueOf(type.getIsAnonymous()), fieldValue.getDataOutput()); derivedRecordBuilder.addField(MetadataRecordTypes.DERIVEDTYPE_ARECORD_ISANONYMOUS_FIELD_INDEX, fieldValue); switch (tag) { @@ -308,14 +315,18 @@ public class DatatypeTupleTranslator extends AbstractTupleTranslator<Datatype> { ARecordType recType = (ARecordType) type; OrderedListBuilder listBuilder = new OrderedListBuilder(); listBuilder.reset(new AOrderedListType(MetadataRecordTypes.FIELD_RECORDTYPE, null)); - IAType fieldType = null; + IAType fieldType; for (int i = 0; i < recType.getFieldNames().length; i++) { 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(fieldType.getTypeName(), (AbstractComplexType) fieldType, instance, @@ -342,6 +353,14 @@ public class DatatypeTupleTranslator extends AbstractTupleTranslator<Datatype> { booleanSerde.serialize(fieldIsNullable ? ABoolean.TRUE : ABoolean.FALSE, 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/IndexTupleTranslator.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/IndexTupleTranslator.java index a154d7f..0c56c5e 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 @@ -141,7 +141,7 @@ public class IndexTupleTranslator extends AbstractTupleTranslator<Index> { List<IAType> searchKeyType = new ArrayList<>(searchKey.size()); while (fieldTypeCursor.next()) { String typeName = ((AString) fieldTypeCursor.get()).getStringValue(); - IAType fieldType = BuiltinTypeMap.getTypeFromTypeName(metadataNode, txnId, dvName, typeName, false); + IAType fieldType = BuiltinTypeMap.getTypeFromTypeName(metadataNode, txnId, dvName, 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 @@ public class TypeUtil { "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; + } }
