[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;
     }