Merge commit '0c91bd7c564e1bd5cb5d54b137f41a4d9b9db076' into HEAD

Change-Id: Iebc71d2b9797e5f645580ea8ae2b7e149e749a03
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 cf14555..1125c1e 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
@@ -171,8 +171,6 @@
 import org.apache.asterix.metadata.utils.KeyFieldTypeUtil;
 import org.apache.asterix.metadata.utils.MetadataConstants;
 import org.apache.asterix.metadata.utils.MetadataUtil;
-import org.apache.asterix.object.base.AdmObjectNode;
-import org.apache.asterix.object.base.AdmStringNode;
 import org.apache.asterix.om.base.IAObject;
 import org.apache.asterix.om.types.ARecordType;
 import org.apache.asterix.om.types.ATypeTag;
@@ -756,18 +754,10 @@
                             keySourceIndicators, partitioningTypes, autogenerated, filterField);
                     break;
                 case EXTERNAL:
-                    validateExternalDatasetRequirements(appCtx, metadataProvider, mdTxnCtx, dd);
-                    String adapter = ((ExternalDetailsDecl) dd.getDatasetDetailsDecl()).getAdapter();
-                    Map<String, String> properties = ((ExternalDetailsDecl) dd.getDatasetDetailsDecl()).getProperties();
-
-                    // Add the withObjectNode items to the external dataset properties
-                    if (!dd.getWithObjectNode().isEmpty()) {
-                        AdmObjectNode withObjectNode = dd.getWithObjectNode();
-                        dd.getWithObjectNode().getFieldNames().iterator().forEachRemaining(fieldName -> properties
-                                .put(fieldName, ((AdmStringNode) withObjectNode.get(fieldName)).get()));
-                    }
-                    datasetDetails =
-                            new ExternalDatasetDetails(adapter, properties, new Date(), TransactionState.COMMIT);
+                    ExternalDetailsDecl externalDetails = (ExternalDetailsDecl) dd.getDatasetDetailsDecl();
+                    Map<String, String> properties = createExternalDatasetProperties(dd, metadataProvider, mdTxnCtx);
+                    datasetDetails = new ExternalDatasetDetails(externalDetails.getAdapter(), properties, new Date(),
+                            TransactionState.COMMIT);
                     break;
                 default:
                     throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
@@ -854,6 +844,12 @@
         }
     }
 
+    protected Map<String, String> createExternalDatasetProperties(DatasetDecl dd, MetadataProvider metadataProvider,
+            MetadataTransactionContext mdTxnCtx) throws AlgebricksException {
+        ExternalDetailsDecl externalDetails = (ExternalDetailsDecl) dd.getDatasetDetailsDecl();
+        return externalDetails.getProperties();
+    }
+
     protected static void validateIfResourceIsActiveInFeed(ICcApplicationContext appCtx, Dataset dataset,
             SourceLocation sourceLoc) throws CompilationException {
         ActiveNotificationHandler activeEventHandler =
@@ -3417,17 +3413,4 @@
             throw new RuntimeDataException(ErrorCode.REQUEST_CANCELLED, clientRequest.getId());
         }
     }
-
-    /**
-     * Performs any required validation before creating an external dataset
-     *
-     * @param appContext {@link ICcApplicationContext} context
-     * @param metadataProvider {@link MetadataProvider} metadata provider
-     * @param mdTxnCtx {@link MetadataTransactionContext} metadata transaction context
-     * @param datasetDecl {@link DatasetDecl} dataset declaration statement
-     */
-    protected void validateExternalDatasetRequirements(ICcApplicationContext appContext,
-            MetadataProvider metadataProvider, MetadataTransactionContext mdTxnCtx, DatasetDecl datasetDecl)
-            throws Exception {
-    }
 }