This is an automated email from the ASF dual-hosted git repository. imaxon pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/asterixdb.git
commit 8982b10e7cfb93ba22d88ce252dbd99d93ad056a Author: Ian Maxon <[email protected]> AuthorDate: Tue Nov 29 19:36:54 2022 -0800 [ASTERIXDB-3091][MTD] Make DROP TYPE derive correct names - user model changes: no - storage format changes: no - interface changes: no Details: DROP TYPE tries to derive the dependent nested anonymous types to drop by name. However, when we insert these, for missable fields and nested collections, the base type is used rather than the quantified or outer type to create the name. This happens to work most of the time hence this was not noticed for a very long time. This patch just fixes the two cases by using the unquantified type for missable fields of records, and the item type rather than the collection type for collections. Change-Id: I67f3ea5bbd9dd4f5f4b836e765f42ccc1d7b13ca Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/17296 Integration-Tests: Jenkins <[email protected]> Tested-by: Jenkins <[email protected]> Reviewed-by: Ian Maxon <[email protected]> Reviewed-by: Ali Alsuliman <[email protected]> --- .../drop-anonymous-nested-types.000.ddl.sqlpp | 20 ++++++++++++ .../drop-anonymous-nested-types.001.query.sqlpp | 20 ++++++++++++ .../drop-anonymous-nested-types.002.ddl.sqlpp | 37 ++++++++++++++++++++++ .../drop-anonymous-nested-types.003.query.sqlpp | 20 ++++++++++++ .../drop-anonymous-nested-types.004.ddl.sqlpp | 20 ++++++++++++ .../drop-anonymous-nested-types.005.query.sqlpp | 21 ++++++++++++ .../drop-anonymous-nested-types.001.adm | 0 .../drop-anonymous-nested-types.003.adm | 10 ++++++ .../drop-anonymous-nested-types.005.adm | 0 .../test/resources/runtimets/testsuite_sqlpp.xml | 5 +++ .../org/apache/asterix/metadata/MetadataNode.java | 15 ++++++--- 11 files changed, 164 insertions(+), 4 deletions(-) diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/drop-anonymous-nested-types/drop-anonymous-nested-types.000.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/drop-anonymous-nested-types/drop-anonymous-nested-types.000.ddl.sqlpp new file mode 100644 index 0000000000..5a225a9290 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/drop-anonymous-nested-types/drop-anonymous-nested-types.000.ddl.sqlpp @@ -0,0 +1,20 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +DROP DATAVERSE hanging IF EXISTS; +CREATE DATAVERSE hanging; \ No newline at end of file diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/drop-anonymous-nested-types/drop-anonymous-nested-types.001.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/drop-anonymous-nested-types/drop-anonymous-nested-types.001.query.sqlpp new file mode 100644 index 0000000000..678e47dae7 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/drop-anonymous-nested-types/drop-anonymous-nested-types.001.query.sqlpp @@ -0,0 +1,20 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +SELECT * FROM Metadata.Datatype d +WHERE d.DataverseName="hanging"; \ No newline at end of file diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/drop-anonymous-nested-types/drop-anonymous-nested-types.002.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/drop-anonymous-nested-types/drop-anonymous-nested-types.002.ddl.sqlpp new file mode 100644 index 0000000000..89fd9f0316 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/drop-anonymous-nested-types/drop-anonymous-nested-types.002.ddl.sqlpp @@ -0,0 +1,37 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +USE hanging; +CREATE TYPE UserType AS { +_oid: uuid, +user_id: string, +email: string, +name: +{ first: string?, last: string?, nesty: [ string ]?, nestier: { bar: bigint } } +, +address: +{ street: string?, city: string?, state: string?, zip: int? } +?, +categories: [ string ], +phone: [ +{ number: string?, kind: string?, nesty: [ string ]?, nestier: { bar: bigint } } +], +joined_date: string, +is_buyer: boolean, +is_seller: boolean +}; diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/drop-anonymous-nested-types/drop-anonymous-nested-types.003.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/drop-anonymous-nested-types/drop-anonymous-nested-types.003.query.sqlpp new file mode 100644 index 0000000000..678e47dae7 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/drop-anonymous-nested-types/drop-anonymous-nested-types.003.query.sqlpp @@ -0,0 +1,20 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +SELECT * FROM Metadata.Datatype d +WHERE d.DataverseName="hanging"; \ No newline at end of file diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/drop-anonymous-nested-types/drop-anonymous-nested-types.004.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/drop-anonymous-nested-types/drop-anonymous-nested-types.004.ddl.sqlpp new file mode 100644 index 0000000000..de21a0d3fd --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/drop-anonymous-nested-types/drop-anonymous-nested-types.004.ddl.sqlpp @@ -0,0 +1,20 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +USE hanging; +DROP TYPE UserType; \ No newline at end of file diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/drop-anonymous-nested-types/drop-anonymous-nested-types.005.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/drop-anonymous-nested-types/drop-anonymous-nested-types.005.query.sqlpp new file mode 100644 index 0000000000..d82d9dc8ff --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/drop-anonymous-nested-types/drop-anonymous-nested-types.005.query.sqlpp @@ -0,0 +1,21 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +USE hanging; +SELECT * FROM Metadata.Datatype d +WHERE d.DataverseName="hanging"; \ No newline at end of file diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/ddl/drop-anonymous-nested-types/drop-anonymous-nested-types.001.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/ddl/drop-anonymous-nested-types/drop-anonymous-nested-types.001.adm new file mode 100644 index 0000000000..e69de29bb2 diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/ddl/drop-anonymous-nested-types/drop-anonymous-nested-types.003.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/ddl/drop-anonymous-nested-types/drop-anonymous-nested-types.003.adm new file mode 100644 index 0000000000..32a1d9948a --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/ddl/drop-anonymous-nested-types/drop-anonymous-nested-types.003.adm @@ -0,0 +1,10 @@ +{ "d": { "DataverseName": "hanging", "DatatypeName": "UserType", "Derived": { "Tag": "RECORD", "IsAnonymous": false, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "_oid", "FieldType": "uuid", "IsNullable": false, "IsMissable": false }, { "FieldName": "user_id", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "email", "FieldType": "string", "IsNullable": false, "IsMissable": false }, { "FieldName": "name", "FieldType": "UserType_name", "IsNullabl [...] +{ "d": { "DataverseName": "hanging", "DatatypeName": "UserType_address", "Derived": { "Tag": "RECORD", "IsAnonymous": true, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "street", "FieldType": "string", "IsNullable": true, "IsMissable": true }, { "FieldName": "city", "FieldType": "string", "IsNullable": true, "IsMissable": true }, { "FieldName": "state", "FieldType": "string", "IsNullable": true, "IsMissable": true }, { "FieldName": "zip", "FieldType": "int64", "IsNullable": tru [...] +{ "d": { "DataverseName": "hanging", "DatatypeName": "UserType_categories", "Derived": { "Tag": "ORDEREDLIST", "IsAnonymous": true, "OrderedList": "string" }, "Timestamp": "Tue Mar 21 11:21:48 PDT 2023" } } +{ "d": { "DataverseName": "hanging", "DatatypeName": "UserType_name", "Derived": { "Tag": "RECORD", "IsAnonymous": true, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "first", "FieldType": "string", "IsNullable": true, "IsMissable": true }, { "FieldName": "last", "FieldType": "string", "IsNullable": true, "IsMissable": true }, { "FieldName": "nesty", "FieldType": "UserType_name_nesty", "IsNullable": true, "IsMissable": true }, { "FieldName": "nestier", "FieldType": "UserType_nam [...] +{ "d": { "DataverseName": "hanging", "DatatypeName": "UserType_name_nestier", "Derived": { "Tag": "RECORD", "IsAnonymous": true, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "bar", "FieldType": "int64", "IsNullable": false, "IsMissable": false } ] } }, "Timestamp": "Tue Mar 21 11:21:48 PDT 2023" } } +{ "d": { "DataverseName": "hanging", "DatatypeName": "UserType_name_nesty", "Derived": { "Tag": "ORDEREDLIST", "IsAnonymous": true, "OrderedList": "string" }, "Timestamp": "Tue Mar 21 11:21:48 PDT 2023" } } +{ "d": { "DataverseName": "hanging", "DatatypeName": "UserType_phone", "Derived": { "Tag": "ORDEREDLIST", "IsAnonymous": true, "OrderedList": "UserType_phone_Item" }, "Timestamp": "Tue Mar 21 11:21:48 PDT 2023" } } +{ "d": { "DataverseName": "hanging", "DatatypeName": "UserType_phone_Item", "Derived": { "Tag": "RECORD", "IsAnonymous": true, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "number", "FieldType": "string", "IsNullable": true, "IsMissable": true }, { "FieldName": "kind", "FieldType": "string", "IsNullable": true, "IsMissable": true }, { "FieldName": "nesty", "FieldType": "UserType_phone_Item_nesty", "IsNullable": true, "IsMissable": true }, { "FieldName": "nestier", "FieldType": [...] +{ "d": { "DataverseName": "hanging", "DatatypeName": "UserType_phone_Item_nestier", "Derived": { "Tag": "RECORD", "IsAnonymous": true, "Record": { "IsOpen": true, "Fields": [ { "FieldName": "bar", "FieldType": "int64", "IsNullable": false, "IsMissable": false } ] } }, "Timestamp": "Tue Mar 21 11:21:48 PDT 2023" } } +{ "d": { "DataverseName": "hanging", "DatatypeName": "UserType_phone_Item_nesty", "Derived": { "Tag": "ORDEREDLIST", "IsAnonymous": true, "OrderedList": "string" }, "Timestamp": "Tue Mar 21 11:21:48 PDT 2023" } } diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/ddl/drop-anonymous-nested-types/drop-anonymous-nested-types.005.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/ddl/drop-anonymous-nested-types/drop-anonymous-nested-types.005.adm new file mode 100644 index 0000000000..e69de29bb2 diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml index 98a11cec0b..241e65e935 100644 --- a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml +++ b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml @@ -4369,6 +4369,11 @@ <expected-error>Parameter invalid_date cannot be set</expected-error> </compilation-unit> </test-case> + <test-case FilePath="ddl"> + <compilation-unit name="drop-anonymous-nested-types"> + <output-dir compare="Text">drop-anonymous-nested-types</output-dir> + </compilation-unit> + </test-case> </test-group> <test-group name="dml"> <test-case FilePath="dml"> diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataNode.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataNode.java index 87f5129ef4..2195f88cba 100644 --- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataNode.java +++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataNode.java @@ -106,9 +106,11 @@ import org.apache.asterix.metadata.valueextractors.TupleCopyValueExtractor; import org.apache.asterix.om.base.AInt32; import org.apache.asterix.om.base.AMutableString; import org.apache.asterix.om.base.AString; +import org.apache.asterix.om.typecomputer.impl.TypeComputeUtils; import org.apache.asterix.om.types.ARecordType; import org.apache.asterix.om.types.ATypeTag; import org.apache.asterix.om.types.AUnionType; +import org.apache.asterix.om.types.AbstractCollectionType; import org.apache.asterix.om.types.AbstractComplexType; import org.apache.asterix.om.types.BuiltinType; import org.apache.asterix.om.types.IAType; @@ -1483,15 +1485,20 @@ public class MetadataNode implements IMetadataNode { ARecordType recType = (ARecordType) parentType.getDatatype(); subTypes = Arrays.asList(recType.getFieldTypes()); } else if (parentType.getDatatype().getTypeTag() == ATypeTag.UNION) { - AUnionType recType = (AUnionType) parentType.getDatatype(); - subTypes = recType.getUnionList(); + AUnionType unionType = (AUnionType) parentType.getDatatype(); + subTypes = unionType.getUnionList(); + } else if (parentType.getDatatype().getTypeTag() == ATypeTag.ARRAY + || parentType.getDatatype().getTypeTag() == ATypeTag.MULTISET) { + AbstractCollectionType collType = (AbstractCollectionType) parentType.getDatatype(); + subTypes = List.of(collType.getItemType()); } List<String> nestedTypes = new ArrayList<>(); if (subTypes != null) { for (IAType subType : subTypes) { - if (!(subType instanceof BuiltinType)) { - nestedTypes.add(subType.getTypeName()); + IAType actualType = TypeComputeUtils.getActualType(subType); + if (!(actualType instanceof BuiltinType)) { + nestedTypes.add(actualType.getTypeName()); } } }
