[NO ISSUE] [MISC] Misc. Changes
Details:
1. Resolving Dataset Creation Issue in case of Standalone collection Extensions
2. added record field to addMeta in DataParserFactory for Extensions
Change-Id: I30d4b7633cef47fcbb9d340407f0fc5483c647a5
Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/18164
Integration-Tests: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Tested-by: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Reviewed-by: Murtadha Hubail <mhubail@apache.org>
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 30c7127..f20a0319 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
@@ -981,7 +981,7 @@
compactionPolicy = StorageConstants.DEFAULT_FILTERED_DATASET_COMPACTION_POLICY_NAME;
compactionPolicyProperties = StorageConstants.DEFAULT_COMPACTION_POLICY_PROPERTIES;
}
- boolean isDatasetWithoutTypeSpec = aRecordType.getFieldNames().length == 0 && metaRecType == null;
+ boolean isDatasetWithoutTypeSpec = isDatasetWithoutTypeSpec(dd, aRecordType, metaRecType);
// Validate dataset properties if the format is COLUMN
ColumnPropertiesValidationUtil.validate(sourceLoc, datasetFormatInfo.getFormat(), compactionPolicy,
filterField);
@@ -1108,6 +1108,11 @@
return Optional.of(dataset);
}
+ protected boolean isDatasetWithoutTypeSpec(DatasetDecl datasetDecl, ARecordType aRecordType,
+ ARecordType metaRecType) {
+ return aRecordType.getFieldNames().length == 0 && metaRecType == null;
+ }
+
protected IDataset createDataset(DatasetDecl dd, String database, DataverseName dataverseName, String datasetName,
String itemTypeDatabase, DataverseName itemTypeDataverseName, String itemTypeName,
String metaItemTypeDatabase, DataverseName metaItemTypeDataverseName, String metaItemTypeName,
diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/api/IRecordWithMetadataParser.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/api/IRecordWithMetadataParser.java
index 751541d..e04be9a 100644
--- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/api/IRecordWithMetadataParser.java
+++ b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/api/IRecordWithMetadataParser.java
@@ -24,7 +24,7 @@
import org.apache.hyracks.dataflow.common.comm.io.ArrayTupleBuilder;
public interface IRecordWithMetadataParser<T> extends IRecordDataParser<T> {
- public void parseMeta(DataOutput out) throws HyracksDataException;
+ void parseMeta(DataOutput out, IRawRecord<? extends T> record) throws HyracksDataException;
void appendLastParsedPrimaryKeyToTuple(ArrayTupleBuilder tb) throws HyracksDataException;
}
diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/dataflow/FeedWithMetaDataFlowController.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/dataflow/FeedWithMetaDataFlowController.java
index 74bfe26..b78c270 100644
--- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/dataflow/FeedWithMetaDataFlowController.java
+++ b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/dataflow/FeedWithMetaDataFlowController.java
@@ -39,7 +39,7 @@
@Override
protected void addMetaPart(ArrayTupleBuilder tb, IRawRecord<? extends T> record) throws HyracksDataException {
- dataParser.parseMeta(tb.getDataOutput());
+ dataParser.parseMeta(tb.getDataOutput(), record);
tb.addFieldEndOffset();
}
}
diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/parser/RecordWithMetadataParser.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/parser/RecordWithMetadataParser.java
index d799f22..073c5e2 100644
--- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/parser/RecordWithMetadataParser.java
+++ b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/parser/RecordWithMetadataParser.java
@@ -88,7 +88,7 @@
}
@Override
- public void parseMeta(DataOutput out) throws HyracksDataException {
+ public void parseMeta(DataOutput out, IRawRecord<? extends T> record) throws HyracksDataException {
try {
if (rwm.getRecord().size() == 0) {
out.writeByte(ATypeTag.SERIALIZED_MISSING_TYPE_TAG);
diff --git a/asterixdb/asterix-external-data/src/test/java/org/apache/asterix/external/parser/test/RecordWithMetaTest.java b/asterixdb/asterix-external-data/src/test/java/org/apache/asterix/external/parser/test/RecordWithMetaTest.java
index 994325e..4bf9174 100644
--- a/asterixdb/asterix-external-data/src/test/java/org/apache/asterix/external/parser/test/RecordWithMetaTest.java
+++ b/asterixdb/asterix-external-data/src/test/java/org/apache/asterix/external/parser/test/RecordWithMetaTest.java
@@ -128,7 +128,7 @@
tb.reset();
if (parser.parse(record, tb.getDataOutput())) {
tb.addFieldEndOffset();
- parser.parseMeta(tb.getDataOutput());
+ parser.parseMeta(tb.getDataOutput(), record);
tb.addFieldEndOffset();
parser.appendLastParsedPrimaryKeyToTuple(tb);
//print tuple
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 8a83517..f42ded2 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
@@ -66,8 +66,8 @@
}
/**
- * Checks if a dataset is created without type specification and has no meta part. For such datasets,
- * creates and returns a record type based on the primary key and primary key types information included in the
+ * Checks if a dataset is created without type specification and has no meta part or if the datasetWithoutTypeSpecification is true.
+ * For such datasets, creates and returns a record type based on the primary key and primary key types information included in the
* internal details.
*
* @param itemType record type of the dataset
@@ -78,11 +78,11 @@
*/
public static IAType findTypeForDatasetWithoutType(IAType itemType, IAType metaItemType, Dataset dataset)
throws AlgebricksException {
- ARecordType recordType = (ARecordType) itemType;
- if (recordType.getFieldNames().length == 0 && metaItemType == null
- && dataset.getDatasetType() == DatasetConfig.DatasetType.INTERNAL) {
+ if (dataset.getDatasetType() == DatasetConfig.DatasetType.INTERNAL) {
InternalDatasetDetails dsDetails = (InternalDatasetDetails) dataset.getDatasetDetails();
- return findType(dsDetails.getPrimaryKey(), dsDetails.getPrimaryKeyType());
+ if (dsDetails.isDatasetWithoutTypeSpecification()) {
+ return findType(dsDetails.getPrimaryKey(), dsDetails.getPrimaryKeyType());
+ }
}
return itemType;
}