>From Michael Blow <mb...@apache.org>: Michael Blow has uploaded this change for review. ( https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/20083 )
Change subject: [ASTERIXDB-3627][OTH] Primary key missing from result ...................................................................... [ASTERIXDB-3627][OTH] Primary key missing from result - user model changes: no - storage format changes: no - interface changes: no Ext-ref: MB-67595 (cherry picked from commit 80a41e247c) Change-Id: I4d38712226778ef52aabacdcfe1e0b26e0d74bea --- M asterixdb/asterix-app/src/test/java/org/apache/asterix/api/http/servlet/ConnectorApiServletTest.java M asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/IndexTupleTranslator.java M asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java M asterixdb/asterix-app/src/main/java/org/apache/asterix/utils/RebalanceUtil.java M asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/OptimizableOperatorSubTree.java M asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/PushFieldAccessRule.java M asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/QueryPartitionRewriter.java M asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SampleOperationsHelper.java M asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/IntroducePrimaryIndexForAggregationRule.java R asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/create-dataset-4/create-dataset-4.09.ddl.sqlpp A asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/create-dataset-4/create-dataset-4.08.query.sqlpp M asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceSecondaryIndexInsertDeleteRule.java M asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/operators/physical/BTreeSearchPOperator.java M asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/DatasetDataSource.java M asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/DatasetRewriter.java M asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/QueryIndexRewriter.java M asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/MetadataManagerUtil.java M asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryIndexOperationsHelper.java M asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Dataset.java M asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ConnectorApiServlet.java M asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/DatasetUtil.java M asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/LangExpressionToPlanTranslator.java A asterixdb/asterix-app/src/test/resources/runtimets/results/ddl/create-dataset-4/create-dataset-4.08.adm M asterixdb/asterix-app/src/test/resources/runtimets/results/column/upsert/003/003.003.regexadm M asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/IntroduceLSMComponentFilterRule.java M asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/MetadataProvider.java 26 files changed, 78 insertions(+), 33 deletions(-) git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb refs/changes/83/20083/1 diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/operators/physical/BTreeSearchPOperator.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/operators/physical/BTreeSearchPOperator.java index b965512..c83b72c 100644 --- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/operators/physical/BTreeSearchPOperator.java +++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/operators/physical/BTreeSearchPOperator.java @@ -164,8 +164,7 @@ if (isPrimaryIndex && formatInfo.getFormat() == DatasetConfig.DatasetFormat.COLUMN) { ARecordType datasetType = (ARecordType) metadataProvider.findType(dataset); ARecordType metaItemType = (ARecordType) metadataProvider.findMetaType(dataset); - datasetType = - (ARecordType) metadataProvider.findTypeForDatasetWithoutType(datasetType, metaItemType, dataset); + datasetType = (ARecordType) metadataProvider.findTypeForDatasetWithoutType(datasetType, dataset); tupleProjectorFactory = IndexUtil.createTupleProjectorFactory(context, typeEnv, formatInfo, projectionFiltrationInfo, datasetType, metaItemType, dataset.getPrimaryKeys().size()); } diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceSecondaryIndexInsertDeleteRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceSecondaryIndexInsertDeleteRule.java index 33c5baa..887b18e 100644 --- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceSecondaryIndexInsertDeleteRule.java +++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceSecondaryIndexInsertDeleteRule.java @@ -194,7 +194,7 @@ metaType = (ARecordType) mp.findType(dataset.getMetaItemTypeDatabaseName(), dataset.getMetaItemTypeDataverseName(), dataset.getMetaItemTypeName()); } - recType = (ARecordType) mp.findTypeForDatasetWithoutType(recType, metaType, dataset); + recType = (ARecordType) mp.findTypeForDatasetWithoutType(recType, dataset); List<Index> indexes = mp.getDatasetIndexes(dataset.getDatabaseName(), dataset.getDataverseName(), dataset.getDatasetName()); diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/PushFieldAccessRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/PushFieldAccessRule.java index eb93774..31f2511 100644 --- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/PushFieldAccessRule.java +++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/PushFieldAccessRule.java @@ -142,6 +142,7 @@ if (pos != null) { String tName = dataset.getItemTypeName(); IAType t = mp.findType(dataset.getItemTypeDatabaseName(), dataset.getItemTypeDataverseName(), tName); + t = mp.findTypeForDatasetWithoutType(t, dataset); if (t.getTypeTag() != ATypeTag.OBJECT) { return false; } @@ -338,6 +339,7 @@ String dataTypeName = dataset.getItemTypeName(); IAType dataType = mp.findType(dataset.getItemTypeDatabaseName(), dataset.getItemTypeDataverseName(), dataTypeName); + dataType = mp.findTypeForDatasetWithoutType(dataType, dataset); if (dataType.getTypeTag() != ATypeTag.OBJECT) { return false; } diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/IntroduceLSMComponentFilterRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/IntroduceLSMComponentFilterRule.java index 9b7edc3..e64e00c 100644 --- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/IntroduceLSMComponentFilterRule.java +++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/IntroduceLSMComponentFilterRule.java @@ -97,11 +97,14 @@ if (dataset != null && dataset.getDatasetType() == DatasetType.INTERNAL) { filterSourceIndicator = DatasetUtil.getFilterSourceIndicator(dataset); filterFieldName = DatasetUtil.getFilterField(dataset); - IAType filterSourceType = filterSourceIndicator == null || filterSourceIndicator == 0 - ? mp.findType(dataset.getItemTypeDatabaseName(), dataset.getItemTypeDataverseName(), - dataset.getItemTypeName()) - : mp.findType(dataset.getMetaItemTypeDatabaseName(), dataset.getMetaItemTypeDataverseName(), - dataset.getMetaItemTypeName()); + IAType dataType = mp.findType(dataset.getItemTypeDatabaseName(), dataset.getItemTypeDataverseName(), + dataset.getItemTypeName()); + dataType = mp.findTypeForDatasetWithoutType(dataType, dataset); + IAType metaItemType = mp.findType(dataset.getMetaItemTypeDatabaseName(), + dataset.getMetaItemTypeDataverseName(), dataset.getMetaItemTypeName()); + IAType filterSourceType = + filterSourceIndicator == null || filterSourceIndicator == 0 ? dataType : metaItemType; + filterSourceType = mp.findTypeForDatasetWithoutType(filterSourceType, dataset); if (filterSourceType.getTypeTag() == ATypeTag.OBJECT) { itemType = (ARecordType) filterSourceType; @@ -596,6 +599,8 @@ IAType recordItemType = ((MetadataProvider) context.getMetadataProvider()).findType( dataset.getItemTypeDatabaseName(), dataset.getItemTypeDataverseName(), dataset.getItemTypeName()); + recordItemType = ((MetadataProvider) context.getMetadataProvider()) + .findTypeForDatasetWithoutType(recordItemType, dataset); ARecordType recordType = (ARecordType) recordItemType; ARecordType metaRecType = (ARecordType) metaItemType; int numSecondaryKeys = KeyFieldTypeUtil.getNumSecondaryKeys(index, recordType, metaRecType); diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/IntroducePrimaryIndexForAggregationRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/IntroducePrimaryIndexForAggregationRule.java index a079c3f..146eb26 100644 --- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/IntroducePrimaryIndexForAggregationRule.java +++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/IntroducePrimaryIndexForAggregationRule.java @@ -240,7 +240,7 @@ ARecordType metaRecordType = (ARecordType) ((MetadataProvider) context.getMetadataProvider()).findMetaType(dataset); recordType = (ARecordType) ((MetadataProvider) context.getMetadataProvider()) - .findTypeForDatasetWithoutType(recordType, metaRecordType, dataset); + .findTypeForDatasetWithoutType(recordType, dataset); // create the operator that will replace the dataset scan/search AbstractUnnestMapOperator primaryIndexUnnestOperator = diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/OptimizableOperatorSubTree.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/OptimizableOperatorSubTree.java index a6c7a32..8e3db4b 100644 --- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/OptimizableOperatorSubTree.java +++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/OptimizableOperatorSubTree.java @@ -343,7 +343,7 @@ ARecordType metaItemType = (ARecordType) metadataProvider.findType(ds.getMetaItemTypeDatabaseName(), ds.getMetaItemTypeDataverseName(), ds.getMetaItemTypeName()); - rType = (ARecordType) metadataProvider.findTypeForDatasetWithoutType(rType, metaItemType, ds); + rType = (ARecordType) metadataProvider.findTypeForDatasetWithoutType(rType, ds); // First index is always the primary datasource in this subtree. if (i == 0) { diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/LangExpressionToPlanTranslator.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/LangExpressionToPlanTranslator.java index ed62ba3..98c832a 100644 --- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/LangExpressionToPlanTranslator.java +++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/LangExpressionToPlanTranslator.java @@ -216,7 +216,7 @@ dataset.getItemTypeDataverseName(), dataset.getItemTypeName()); IAType metaItemType = metadataProvider.findType(dataset.getMetaItemTypeDatabaseName(), dataset.getMetaItemTypeDataverseName(), dataset.getMetaItemTypeName()); - itemType = metadataProvider.findTypeForDatasetWithoutType(itemType, metaItemType, dataset); + itemType = metadataProvider.findTypeForDatasetWithoutType(itemType, dataset); DatasetDataSource targetDatasource = validateDatasetInfo(metadataProvider, stmt.getDatabaseName(), stmt.getDataverseName(), stmt.getDatasetName(), sourceLoc); @@ -886,7 +886,7 @@ dataset.getItemTypeDataverseName(), dataset.getItemTypeName()); IAType metaItemType = metadataProvider.findType(dataset.getMetaItemTypeDatabaseName(), dataset.getMetaItemTypeDataverseName(), dataset.getMetaItemTypeName()); - itemType = metadataProvider.findTypeForDatasetWithoutType(itemType, metaItemType, dataset); + itemType = metadataProvider.findTypeForDatasetWithoutType(itemType, dataset); INodeDomain domain = metadataProvider.findNodeDomain(dataset.getNodeGroupName()); return new DatasetDataSource(sourceId, dataset, itemType, metaItemType, DataSource.Type.INTERNAL_DATASET, diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ConnectorApiServlet.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ConnectorApiServlet.java index df27ff4..744e624 100644 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ConnectorApiServlet.java +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ConnectorApiServlet.java @@ -114,6 +114,7 @@ String itemTypeDatabase = dataset.getItemTypeDatabaseName(); ARecordType recordType = (ARecordType) metadataProvider.findType(itemTypeDatabase, dataset.getItemTypeDataverseName(), dataset.getItemTypeName()); + recordType = (ARecordType) metadataProvider.findTypeForDatasetWithoutType(recordType, dataset); List<List<String>> primaryKeys = dataset.getPrimaryKeys(); StringBuilder pkStrBuf = new StringBuilder(); for (List<String> keys : primaryKeys) { diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/DatasetRewriter.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/DatasetRewriter.java index 617d59b..3e8b02a 100644 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/DatasetRewriter.java +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/DatasetRewriter.java @@ -150,6 +150,7 @@ Dataset dataset = fetchDataset(metadata, datasetFnCall); IAType type = metadata.findType(dataset.getItemTypeDatabaseName(), dataset.getItemTypeDataverseName(), dataset.getItemTypeName()); + type = ((MetadataProvider) mp).findTypeForDatasetWithoutType(type, dataset); if (type == null) { throw new CompilationException(ErrorCode.COMPILATION_ERROR, datasetFnCall.getSourceLocation(), "No type for " + dataset() + " " + dataset.getDatasetName()); diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/QueryIndexRewriter.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/QueryIndexRewriter.java index 46f13f1..ae5a77a 100644 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/QueryIndexRewriter.java +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/QueryIndexRewriter.java @@ -159,7 +159,7 @@ Index index = validateIndex(f, metadataProvider, loc, databaseName, dataverseName, datasetName, indexName); ARecordType dsType = (ARecordType) metadataProvider.findType(dataset); ARecordType metaType = DatasetUtil.getMetaType(metadataProvider, dataset); - dsType = (ARecordType) metadataProvider.findTypeForDatasetWithoutType(dsType, metaType, dataset); + dsType = (ARecordType) metadataProvider.findTypeForDatasetWithoutType(dsType, dataset); List<IAType> dsKeyTypes = KeyFieldTypeUtil.getPartitoningKeyTypes(dataset, dsType, metaType); List<Pair<IAType, Boolean>> secKeyTypes = KeyFieldTypeUtil.getBTreeIndexKeyTypes(index, dsType, metaType); diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/QueryPartitionRewriter.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/QueryPartitionRewriter.java index 4514a30..a0810cb 100644 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/QueryPartitionRewriter.java +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/QueryPartitionRewriter.java @@ -168,7 +168,7 @@ Dataset dataset = validateDataset(metadataProvider, dbName, dvName, dsName, loc); ARecordType dsType = (ARecordType) metadataProvider.findType(dataset); ARecordType metaType = DatasetUtil.getMetaType(metadataProvider, dataset); - dsType = (ARecordType) metadataProvider.findTypeForDatasetWithoutType(dsType, metaType, dataset); + dsType = (ARecordType) metadataProvider.findTypeForDatasetWithoutType(dsType, dataset); List<IAType> dsKeyTypes = KeyFieldTypeUtil.getPartitoningKeyTypes(dataset, dsType, metaType); List<List<String>> primaryKeys = dataset.getPrimaryKeys(); diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java index 18ffa02..30c1b8b 100644 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java @@ -1382,7 +1382,7 @@ } */ if (!ds.hasMetaPart()) { - aRecordType = (ARecordType) metadataProvider.findTypeForDatasetWithoutType(aRecordType, null, ds); + aRecordType = (ARecordType) metadataProvider.findTypeForDatasetWithoutType(aRecordType, ds); } List<List<IAType>> indexFieldTypes = new ArrayList<>(indexedElementsCount); diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/utils/RebalanceUtil.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/utils/RebalanceUtil.java index cc9f1ad..a2cbaa5 100644 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/utils/RebalanceUtil.java +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/utils/RebalanceUtil.java @@ -356,7 +356,7 @@ ARecordType itemType = (ARecordType) metadataProvider.findType(source.getItemTypeDatabaseName(), source.getItemTypeDataverseName(), source.getItemTypeName()); ARecordType metaType = DatasetUtil.getMetaType(metadataProvider, source); - itemType = (ARecordType) metadataProvider.findTypeForDatasetWithoutType(itemType, metaType, source); + itemType = (ARecordType) metadataProvider.findTypeForDatasetWithoutType(itemType, source); int numberOfPrimaryKeys = source.getPrimaryKeys().size(); // The assembly cost of ALL_FIELDS_TYPE could be expensive if record structure is "complex" diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/api/http/servlet/ConnectorApiServletTest.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/api/http/servlet/ConnectorApiServletTest.java index d8fb053..2389a9c 100644 --- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/api/http/servlet/ConnectorApiServletTest.java +++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/api/http/servlet/ConnectorApiServletTest.java @@ -190,6 +190,7 @@ String itemTypeDatabase = dataset.getItemTypeDatabaseName(); ARecordType recordType = (ARecordType) metadataProvider.findType(itemTypeDatabase, dataset.getItemTypeDataverseName(), dataset.getItemTypeName()); + recordType = (ARecordType) metadataProvider.findTypeForDatasetWithoutType(recordType, dataset); // Metadata transaction commits. MetadataManager.INSTANCE.commitTransaction(mdTxnCtx); return recordType; diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/create-dataset-4/create-dataset-4.08.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/create-dataset-4/create-dataset-4.08.query.sqlpp new file mode 100644 index 0000000..673bc80 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/create-dataset-4/create-dataset-4.08.query.sqlpp @@ -0,0 +1,22 @@ +/* + * 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 test; + +select [a] as b from ds1 a order by a.name LIMIT 1; \ No newline at end of file diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/create-dataset-4/create-dataset-4.08.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/create-dataset-4/create-dataset-4.09.ddl.sqlpp similarity index 100% rename from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/create-dataset-4/create-dataset-4.08.ddl.sqlpp rename to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/ddl/create-dataset-4/create-dataset-4.09.ddl.sqlpp diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/upsert/003/003.003.regexadm b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/upsert/003/003.003.regexadm index 64695de..58a2bbc 100644 --- a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/upsert/003/003.003.regexadm +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/upsert/003/003.003.regexadm @@ -1 +1 @@ -\Q{"keys":"id","type":{"type":"org.apache.asterix.om.types.ARecordType","name":"AnyObject","open":true,"fields":[]},"splits":[\E.*\Q]}\E \ No newline at end of file +\Q{"keys":"id","type":{"type":"org.apache.asterix.om.types.ARecordType","name":"root","open":true,"fields":[{"id":{"type":"UUID"}}]},"splits":[\E.*\Q]}\E \ No newline at end of file diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/ddl/create-dataset-4/create-dataset-4.08.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/ddl/create-dataset-4/create-dataset-4.08.adm new file mode 100644 index 0000000..a62b60d --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/ddl/create-dataset-4/create-dataset-4.08.adm @@ -0,0 +1 @@ +{ "b": [ { "name": "abc" } ] } \ No newline at end of file diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/DatasetDataSource.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/DatasetDataSource.java index c404496..b961421 100644 --- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/DatasetDataSource.java +++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/DatasetDataSource.java @@ -163,8 +163,7 @@ dataset.getMetaItemTypeDataverseName(), dataset.getMetaItemTypeName()) .getDatatype(); } - datasetType = (ARecordType) metadataProvider.findTypeForDatasetWithoutType(datasetType, metaItemType, - dataset); + datasetType = (ARecordType) metadataProvider.findTypeForDatasetWithoutType(datasetType, dataset); int numberOfPrimaryKeys = dataset.getPrimaryKeys().size(); ITupleProjectorFactory tupleProjectorFactory = IndexUtil.createTupleProjectorFactory(context, typeEnv, dataset.getDatasetFormatInfo(), diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/MetadataManagerUtil.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/MetadataManagerUtil.java index f42ded2..143b615 100644 --- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/MetadataManagerUtil.java +++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/MetadataManagerUtil.java @@ -71,13 +71,11 @@ * internal details. * * @param itemType record type of the dataset - * @param metaItemType record type of the meta part of the dataset * @param dataset the actual dataset * @return type computed from primary keys if dataset without type spec, otherwise the original itemType itself * @throws AlgebricksException AlgebricksException */ - public static IAType findTypeForDatasetWithoutType(IAType itemType, IAType metaItemType, Dataset dataset) - throws AlgebricksException { + public static IAType findTypeForDatasetWithoutType(IAType itemType, Dataset dataset) throws AlgebricksException { if (dataset.getDatasetType() == DatasetConfig.DatasetType.INTERNAL) { InternalDatasetDetails dsDetails = (InternalDatasetDetails) dataset.getDatasetDetails(); if (dsDetails.isDatasetWithoutTypeSpecification()) { @@ -252,7 +250,7 @@ dataset.getItemTypeName()); IAType metaItemType = findType(mdTxnCtx, dataset.getMetaItemTypeDatabaseName(), dataset.getMetaItemTypeDataverseName(), dataset.getMetaItemTypeName()); - itemType = findTypeForDatasetWithoutType(itemType, metaItemType, dataset); + itemType = findTypeForDatasetWithoutType(itemType, dataset); INodeDomain domain = findNodeDomain(clusterStateManager, mdTxnCtx, dataset.getNodeGroupName()); return new DatasetDataSource(id, dataset, itemType, metaItemType, datasourceType, dataset.getDatasetDetails(), diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/MetadataProvider.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/MetadataProvider.java index 941c8f7..b029137 100644 --- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/MetadataProvider.java +++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/MetadataProvider.java @@ -409,9 +409,8 @@ return MetadataManagerUtil.findTypeEntity(mdTxnCtx, database, dataverseName, typeName); } - public IAType findTypeForDatasetWithoutType(IAType recordType, IAType metaRecordType, Dataset dataset) - throws AlgebricksException { - return MetadataManagerUtil.findTypeForDatasetWithoutType(recordType, metaRecordType, dataset); + public IAType findTypeForDatasetWithoutType(IAType recordType, Dataset dataset) throws AlgebricksException { + return MetadataManagerUtil.findTypeForDatasetWithoutType(recordType, dataset); } public IAType findType(String database, DataverseName dataverseName, String typeName) throws AlgebricksException { @@ -747,6 +746,7 @@ if (isIndexOnlyPlan) { ARecordType recType = (ARecordType) findType(dataset.getItemTypeDatabaseName(), dataset.getItemTypeDataverseName(), dataset.getItemTypeName()); + recType = (ARecordType) findTypeForDatasetWithoutType(recType, dataset); List<List<String>> secondaryKeyFields = secondaryIndexDetails.getKeyFieldNames(); List<IAType> secondaryKeyTypes = secondaryIndexDetails.getKeyFieldTypes(); Pair<IAType, Boolean> keyTypePair = Index.getNonNullableOpenFieldType(secondaryIndex, diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Dataset.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Dataset.java index cae1385..b3fc1e5 100644 --- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Dataset.java +++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Dataset.java @@ -766,7 +766,7 @@ } ARecordType itemType = (ARecordType) metadataProvider.findType(this); ARecordType metaType = (ARecordType) metadataProvider.findMetaType(this); - itemType = (ARecordType) metadataProvider.findTypeForDatasetWithoutType(itemType, metaType, this); + itemType = (ARecordType) metadataProvider.findTypeForDatasetWithoutType(itemType, this); // Set the serde/traits for primary keys for (int i = 0; i < numPrimaryKeys; i++) { @@ -830,7 +830,7 @@ throws AlgebricksException { ARecordType recordType = (ARecordType) metadataProvider.findType(this); ARecordType metaType = (ARecordType) metadataProvider.findMetaType(this); - recordType = (ARecordType) metadataProvider.findTypeForDatasetWithoutType(recordType, metaType, this); + recordType = (ARecordType) metadataProvider.findTypeForDatasetWithoutType(recordType, this); List<List<String>> partitioningKeys = getPrimaryKeys(); int numPrimaryKeys = partitioningKeys.size(); 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 e726db7..966d777 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 @@ -338,7 +338,7 @@ metaDt = (ARecordType) metadataNode .getDatatype(txnId, metaTypeDatabase, metatypeDataverseName, metatypeName).getDatatype(); } - recordDt = (ARecordType) MetadataManagerUtil.findTypeForDatasetWithoutType(recordDt, metaDt, dataset); + recordDt = (ARecordType) MetadataManagerUtil.findTypeForDatasetWithoutType(recordDt, dataset); searchKeyType = new ArrayList<>(searchElementCount); for (int i = 0; i < searchElementCount; i++) { Pair<List<List<String>>, List<List<String>>> searchElement = searchElements.get(i); diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/DatasetUtil.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/DatasetUtil.java index 0cd150e..91187ae 100644 --- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/DatasetUtil.java +++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/DatasetUtil.java @@ -347,7 +347,7 @@ if (dataset.hasMetaPart()) { metaItemType = (ARecordType) metadataProvider.findMetaType(dataset); } - itemType = (ARecordType) metadataProvider.findTypeForDatasetWithoutType(itemType, metaItemType, dataset); + itemType = (ARecordType) metadataProvider.findTypeForDatasetWithoutType(itemType, dataset); JobSpecification spec = RuntimeUtils.createJobSpecification(metadataProvider.getApplicationContext()); PartitioningProperties partitioningProperties = metadataProvider.getPartitioningProperties(dataset); @@ -471,7 +471,7 @@ int numFilterFields = DatasetUtil.getFilterField(dataset) == null ? 0 : 1; ARecordType itemType = (ARecordType) metadataProvider.findType(dataset); ARecordType metaItemType = (ARecordType) metadataProvider.findMetaType(dataset); - itemType = (ARecordType) metadataProvider.findTypeForDatasetWithoutType(itemType, metaItemType, dataset); + itemType = (ARecordType) metadataProvider.findTypeForDatasetWithoutType(itemType, dataset); Index primaryIndex = metadataProvider.getIndex(dataset.getDatabaseName(), dataset.getDataverseName(), dataset.getDatasetName(), dataset.getDatasetName()); diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SampleOperationsHelper.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SampleOperationsHelper.java index e874663..7e3af78 100644 --- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SampleOperationsHelper.java +++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SampleOperationsHelper.java @@ -130,7 +130,7 @@ itemType = (ARecordType) metadataProvider.findType(dataset.getItemTypeDatabaseName(), dataset.getItemTypeDataverseName(), dataset.getItemTypeName()); metaType = DatasetUtil.getMetaType(metadataProvider, dataset); - itemType = (ARecordType) metadataProvider.findTypeForDatasetWithoutType(itemType, metaType, dataset); + itemType = (ARecordType) metadataProvider.findTypeForDatasetWithoutType(itemType, dataset); recordDesc = dataset.getPrimaryRecordDescriptor(metadataProvider); comparatorFactories = dataset.getPrimaryComparatorFactories(metadataProvider, itemType, metaType); diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryIndexOperationsHelper.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryIndexOperationsHelper.java index 7e1fd48..8350141 100644 --- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryIndexOperationsHelper.java +++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryIndexOperationsHelper.java @@ -139,7 +139,7 @@ ARecordType recordType = (ARecordType) metadataProvider.findType(dataset.getItemTypeDatabaseName(), dataset.getItemTypeDataverseName(), dataset.getItemTypeName()); this.metaType = DatasetUtil.getMetaType(metadataProvider, dataset); - this.itemType = (ARecordType) metadataProvider.findTypeForDatasetWithoutType(recordType, metaType, dataset); + this.itemType = (ARecordType) metadataProvider.findTypeForDatasetWithoutType(recordType, dataset); Pair<ARecordType, ARecordType> enforcedTypes = getEnforcedType(index, itemType, metaType); this.enforcedItemType = enforcedTypes.first; -- To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/20083 To unsubscribe, or for help writing mail filters, visit https://asterix-gerrit.ics.uci.edu/settings Gerrit-Project: asterixdb Gerrit-Branch: phoenix Gerrit-Change-Id: I4d38712226778ef52aabacdcfe1e0b26e0d74bea Gerrit-Change-Number: 20083 Gerrit-PatchSet: 1 Gerrit-Owner: Michael Blow <mb...@apache.org> Gerrit-CC: Peeyush Gupta <peeyush.gu...@couchbase.com> Gerrit-MessageType: newchange