diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/base/ILangExtension.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/base/ILangExtension.java
index bf812b3..6f39959 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/base/ILangExtension.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/base/ILangExtension.java
@@ -20,6 +20,7 @@
 package org.apache.asterix.algebra.base;
 
 import org.apache.asterix.common.api.IExtension;
+import org.apache.asterix.common.api.INamespaceResolver;
 import org.apache.asterix.compiler.provider.ILangCompilationProvider;
 import org.apache.asterix.om.functions.IFunctionManager;
 
@@ -37,7 +38,7 @@
         return ExtensionKind.LANG;
     }
 
-    ILangCompilationProvider getLangCompilationProvider(Language lang);
+    ILangCompilationProvider getLangCompilationProvider(Language lang, INamespaceResolver namespaceResolver);
 
     default IFunctionManager getFunctionManager() {
         return null;
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/compiler/provider/SqlppCompilationProvider.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/compiler/provider/SqlppCompilationProvider.java
index 72807a2..4469dbd 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/compiler/provider/SqlppCompilationProvider.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/compiler/provider/SqlppCompilationProvider.java
@@ -23,6 +23,7 @@
 
 import org.apache.asterix.algebra.base.ILangExpressionToPlanTranslatorFactory;
 import org.apache.asterix.algebra.base.ILangExtension;
+import org.apache.asterix.common.api.INamespaceResolver;
 import org.apache.asterix.common.config.CompilerProperties;
 import org.apache.asterix.external.feed.watch.FeedActivityDetails;
 import org.apache.asterix.lang.common.base.IAstPrintVisitorFactory;
@@ -44,6 +45,12 @@
 
 public class SqlppCompilationProvider implements ILangCompilationProvider {
 
+    protected final INamespaceResolver namespaceResolver;
+
+    public SqlppCompilationProvider(INamespaceResolver namespaceResolver) {
+        this.namespaceResolver = namespaceResolver;
+    }
+
     @Override
     public ILangExtension.Language getLanguage() {
         return ILangExtension.Language.SQLPP;
@@ -51,7 +58,7 @@
 
     @Override
     public IParserFactory getParserFactory() {
-        return new SqlppParserFactory();
+        return new SqlppParserFactory(namespaceResolver);
     }
 
     @Override
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/cc/CCExtensionManager.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/cc/CCExtensionManager.java
index 63c0341..f2c282b 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/cc/CCExtensionManager.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/cc/CCExtensionManager.java
@@ -29,6 +29,7 @@
 import org.apache.asterix.app.translator.DefaultStatementExecutorFactory;
 import org.apache.asterix.common.api.ExtensionId;
 import org.apache.asterix.common.api.IExtension;
+import org.apache.asterix.common.api.INamespaceResolver;
 import org.apache.asterix.common.cluster.IGlobalRecoveryManager;
 import org.apache.asterix.common.config.AsterixExtension;
 import org.apache.asterix.common.context.IStorageComponentProvider;
@@ -68,13 +69,14 @@
      * Initialize {@link org.apache.asterix.app.cc.CCExtensionManager} from configuration
      *
      * @param list
-     *            a list of extensions
+     *         a list of extensions
+     * @param namespaceResolver
      * @throws InstantiationException
      * @throws IllegalAccessException
      * @throws ClassNotFoundException
      * @throws HyracksDataException
      */
-    public CCExtensionManager(List<AsterixExtension> list)
+    public CCExtensionManager(List<AsterixExtension> list, INamespaceResolver namespaceResolver)
             throws InstantiationException, IllegalAccessException, ClassNotFoundException, HyracksDataException {
         Pair<ExtensionId, ILangCompilationProvider> sqlppcp = null;
         Pair<ExtensionId, IFunctionManager> fm = null;
@@ -95,7 +97,8 @@
                         break;
                     case LANG:
                         ILangExtension le = (ILangExtension) extension;
-                        sqlppcp = ExtensionUtil.extendLangCompilationProvider(Language.SQLPP, sqlppcp, le);
+                        sqlppcp = ExtensionUtil.extendLangCompilationProvider(Language.SQLPP, sqlppcp, le,
+                                namespaceResolver);
                         fm = ExtensionUtil.extendFunctionManager(fm, le);
                         break;
                     case RECOVERY:
@@ -109,7 +112,8 @@
             }
         }
         this.statementExecutorExtension = see;
-        this.sqlppCompilationProvider = sqlppcp == null ? new SqlppCompilationProvider() : sqlppcp.second;
+        this.sqlppCompilationProvider =
+                sqlppcp == null ? new SqlppCompilationProvider(namespaceResolver) : sqlppcp.second;
         this.functionManager =
                 fm == null ? new FunctionManager(FunctionCollection.createDefaultFunctionCollection()) : fm.second;
         this.globalRecoveryExtension = gre;
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/cc/CcApplicationContext.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/cc/CcApplicationContext.java
index a79eb0d..24b4856 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/cc/CcApplicationContext.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/cc/CcApplicationContext.java
@@ -58,7 +58,6 @@
 import org.apache.asterix.common.metadata.IMetadataBootstrap;
 import org.apache.asterix.common.metadata.IMetadataLockUtil;
 import org.apache.asterix.common.metadata.NamespacePathResolver;
-import org.apache.asterix.common.metadata.NamespaceResolver;
 import org.apache.asterix.common.replication.INcLifecycleCoordinator;
 import org.apache.asterix.common.storage.ICompressionManager;
 import org.apache.asterix.common.transactions.IResourceIdManager;
@@ -128,7 +127,7 @@
     private final IGlobalTxManager globalTxManager;
     private final IOManager ioManager;
     private final NamespacePathResolver namespacePathResolver;
-    private final NamespaceResolver namespaceResolver;
+    private final INamespaceResolver namespaceResolver;
 
     public CcApplicationContext(ICCServiceContext ccServiceCtx, HyracksConnection hcc,
             Supplier<IMetadataBootstrap> metadataBootstrapSupplier, IGlobalRecoveryManager globalRecoveryManager,
@@ -137,7 +136,8 @@
             IMetadataLockUtil mdLockUtil, IReceptionistFactory receptionistFactory,
             IConfigValidatorFactory configValidatorFactory, Object extensionManager,
             IAdapterFactoryService adapterFactoryService, IGlobalTxManager globalTxManager, IOManager ioManager,
-            CloudProperties cloudProperties) throws AlgebricksException, IOException {
+            CloudProperties cloudProperties, INamespaceResolver namespaceResolver)
+            throws AlgebricksException, IOException {
         this.ccServiceCtx = ccServiceCtx;
         this.hcc = hcc;
         this.activeLifeCycleListener = activeLifeCycleListener;
@@ -174,7 +174,7 @@
         configValidator = configValidatorFactory.create();
         this.adapterFactoryService = adapterFactoryService;
         this.namespacePathResolver = new NamespacePathResolver(isCloudDeployment());
-        this.namespaceResolver = new NamespaceResolver(isCloudDeployment());
+        this.namespaceResolver = namespaceResolver;
         this.globalTxManager = globalTxManager;
         this.ioManager = ioManager;
         dataPartitioningProvider = DataPartitioningProvider.create(this);
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/NCAppRuntimeContext.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/NCAppRuntimeContext.java
index 2b869fd..ab6a62a 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/NCAppRuntimeContext.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/NCAppRuntimeContext.java
@@ -62,7 +62,6 @@
 import org.apache.asterix.common.context.IStorageComponentProvider;
 import org.apache.asterix.common.library.ILibraryManager;
 import org.apache.asterix.common.metadata.NamespacePathResolver;
-import org.apache.asterix.common.metadata.NamespaceResolver;
 import org.apache.asterix.common.replication.IReplicationChannel;
 import org.apache.asterix.common.replication.IReplicationManager;
 import org.apache.asterix.common.replication.IReplicationStrategyFactory;
@@ -174,10 +173,10 @@
     private final CloudProperties cloudProperties;
     private IPartitionBootstrapper partitionBootstrapper;
     private final NamespacePathResolver namespacePathResolver;
-    private final NamespaceResolver namespaceResolver;
+    private final INamespaceResolver namespaceResolver;
 
     public NCAppRuntimeContext(INCServiceContext ncServiceContext, NCExtensionManager extensionManager,
-            IPropertiesFactory propertiesFactory) {
+            IPropertiesFactory propertiesFactory, INamespaceResolver namespaceResolver) {
         this.ncServiceContext = ncServiceContext;
         compilerProperties = propertiesFactory.newCompilerProperties();
         externalProperties = propertiesFactory.newExternalProperties();
@@ -197,7 +196,7 @@
         persistedResourceRegistry = ncServiceContext.getPersistedResourceRegistry();
         cacheManager = new CacheManager();
         namespacePathResolver = new NamespacePathResolver(isCloudDeployment());
-        namespaceResolver = new NamespaceResolver(isCloudDeployment());
+        this.namespaceResolver = namespaceResolver;
     }
 
     @Override
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/NCExtensionManager.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/NCExtensionManager.java
index 6c037d2..339b8d7 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/NCExtensionManager.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/NCExtensionManager.java
@@ -25,6 +25,7 @@
 import org.apache.asterix.algebra.base.ILangExtension;
 import org.apache.asterix.common.api.ExtensionId;
 import org.apache.asterix.common.api.IExtension;
+import org.apache.asterix.common.api.INamespaceResolver;
 import org.apache.asterix.common.config.AsterixExtension;
 import org.apache.asterix.common.exceptions.ACIDException;
 import org.apache.asterix.compiler.provider.ILangCompilationProvider;
@@ -54,7 +55,6 @@
      *
      * @param list
      *         list of user configured extensions
-     * @param ncServiceCtx
      * @throws InstantiationException
      *         if an extension couldn't be created
      * @throws IllegalAccessException
@@ -64,12 +64,12 @@
      * @throws HyracksDataException
      *         if two extensions conlict with each other
      */
-    public NCExtensionManager(List<AsterixExtension> list, INCServiceContext ncServiceCtx)
+    public NCExtensionManager(List<AsterixExtension> list, boolean usingDatabase, INamespaceResolver namespaceResolver)
             throws InstantiationException, IllegalAccessException, ClassNotFoundException, HyracksDataException {
         Pair<ExtensionId, ILangCompilationProvider> sqlppcp = null;
         IMetadataExtension tupleTranslatorProviderExtension = null;
         mdExtensions = new ArrayList<>();
-        MetadataIndexesProvider mdIndexesProvider = new MetadataIndexesProvider(ncServiceCtx);
+        MetadataIndexesProvider mdIndexesProvider = new MetadataIndexesProvider(usingDatabase);
         if (list != null) {
             for (AsterixExtension extensionConf : list) {
                 IExtension extension = (IExtension) Class.forName(extensionConf.getClassName()).newInstance();
@@ -77,8 +77,8 @@
                 switch (extension.getExtensionKind()) {
                     case LANG:
                         ILangExtension le = (ILangExtension) extension;
-                        sqlppcp =
-                                ExtensionUtil.extendLangCompilationProvider(ILangExtension.Language.SQLPP, sqlppcp, le);
+                        sqlppcp = ExtensionUtil.extendLangCompilationProvider(ILangExtension.Language.SQLPP, sqlppcp,
+                                le, namespaceResolver);
                         break;
                     case METADATA:
                         IMetadataExtension mde = (IMetadataExtension) extension;
@@ -92,12 +92,13 @@
                 }
             }
         }
-        this.sqlppCompilationProvider = sqlppcp == null ? new SqlppCompilationProvider() : sqlppcp.second;
+        this.sqlppCompilationProvider =
+                sqlppcp == null ? new SqlppCompilationProvider(namespaceResolver) : sqlppcp.second;
         if (tupleTranslatorProviderExtension == null) {
             this.metadataIndexesProvider = mdIndexesProvider;
             this.tupleTranslatorProvider = new MetadataTupleTranslatorProvider(metadataIndexesProvider);
         } else {
-            this.metadataIndexesProvider = tupleTranslatorProviderExtension.getMetadataIndexesProvider(ncServiceCtx);
+            this.metadataIndexesProvider = tupleTranslatorProviderExtension.getMetadataIndexesProvider(usingDatabase);
             this.tupleTranslatorProvider =
                     tupleTranslatorProviderExtension.getMetadataTupleTranslatorProvider(metadataIndexesProvider);
         }
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 c47eb58..455567d 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
@@ -67,6 +67,7 @@
 import org.apache.asterix.common.api.IApplicationContext;
 import org.apache.asterix.common.api.IClientRequest;
 import org.apache.asterix.common.api.IMetadataLockManager;
+import org.apache.asterix.common.api.INamespaceResolver;
 import org.apache.asterix.common.api.IRequestTracker;
 import org.apache.asterix.common.api.IResponsePrinter;
 import org.apache.asterix.common.cluster.IClusterStateManager;
@@ -95,6 +96,7 @@
 import org.apache.asterix.common.metadata.IMetadataLockUtil;
 import org.apache.asterix.common.metadata.MetadataConstants;
 import org.apache.asterix.common.metadata.MetadataUtil;
+import org.apache.asterix.common.metadata.Namespace;
 import org.apache.asterix.common.utils.JobUtils;
 import org.apache.asterix.common.utils.JobUtils.ProgressState;
 import org.apache.asterix.common.utils.StorageConstants;
@@ -300,6 +302,7 @@
     protected final WarningCollector warningCollector;
     protected final ReentrantReadWriteLock compilationLock;
     protected final IGlobalTxManager globalTxManager;
+    protected final INamespaceResolver namespaceResolver;
 
     public QueryTranslator(ICcApplicationContext appCtx, List<Statement> statements, SessionOutput output,
             ILangCompilationProvider compilationProvider, ExecutorService executorService,
@@ -323,6 +326,7 @@
             this.jobFlags.add(JobFlag.ENFORCE_CONTRACT);
         }
         this.globalTxManager = appCtx.getGlobalTxManager();
+        this.namespaceResolver = appCtx.getNamespaceResolver();
     }
 
     public SessionOutput getSessionOutput() {
@@ -563,8 +567,8 @@
         if (requestDataverseName == null) {
             return null;
         }
-        DataverseName dvName = DataverseName.createFromCanonicalForm(requestDataverseName);
-        return new DataverseDecl(dvName, true);
+        Namespace requestNamespace = namespaceResolver.resolve(requestDataverseName);
+        return new DataverseDecl(requestNamespace, true);
     }
 
     protected void handleSetStatement(Statement stmt, Map<String, String> config) throws CompilationException {
@@ -588,7 +592,7 @@
             throws Exception {
         DataverseDecl dvd = (DataverseDecl) stmt;
         DataverseName dvName = dvd.getDataverseName();
-        String database = MetadataUtil.resolveDatabase(null, dvName);
+        String database = dvd.getDatabaseName();
         metadataProvider.validateDataverseName(dvName, dvd.getSourceLocation());
         //TODO(DB): read lock on database
         lockManager.acquireDataverseReadLock(metadataProvider.getLocks(), database, dvName);
@@ -605,7 +609,7 @@
         metadataProvider.setMetadataTxnContext(mdTxnCtx);
         try {
             DataverseName dvName = stmtUseDataverse.getDataverseName();
-            String database = MetadataUtil.resolveDatabase(null, dvName);
+            String database = stmtUseDataverse.getDatabaseName();
             Dataverse dv =
                     MetadataManager.INSTANCE.getDataverse(metadataProvider.getMetadataTxnContext(), database, dvName);
             if (dv == null) {
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/drivers/AsterixClientDriver.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/drivers/AsterixClientDriver.java
index a5d99fb..4b5261b 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/drivers/AsterixClientDriver.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/drivers/AsterixClientDriver.java
@@ -23,6 +23,7 @@
 import org.apache.asterix.api.common.AsterixClientConfig;
 import org.apache.asterix.api.java.AsterixJavaClient;
 import org.apache.asterix.app.translator.DefaultStatementExecutorFactory;
+import org.apache.asterix.common.metadata.NamespaceResolver;
 import org.apache.asterix.compiler.provider.ILangCompilationProvider;
 import org.apache.asterix.compiler.provider.SqlppCompilationProvider;
 import org.apache.asterix.file.StorageComponentProvider;
@@ -62,7 +63,7 @@
 
     private static AsterixJavaClient compileQuery(IHyracksClientConnection hcc, String filename, boolean optimize,
             boolean onlyPhysical, boolean createBinaryRuntime) throws Exception {
-        ILangCompilationProvider compilationProvider = new SqlppCompilationProvider();
+        ILangCompilationProvider compilationProvider = new SqlppCompilationProvider(new NamespaceResolver(false));
         FileReader reader = new FileReader(filename);
         AsterixJavaClient q = new AsterixJavaClient(null, hcc, reader, compilationProvider,
                 new DefaultStatementExecutorFactory(), new StorageComponentProvider());
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/CCApplication.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/CCApplication.java
index 38bf230..de3cb82 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/CCApplication.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/CCApplication.java
@@ -64,6 +64,7 @@
 import org.apache.asterix.cloud.CloudManagerProvider;
 import org.apache.asterix.common.api.AsterixThreadFactory;
 import org.apache.asterix.common.api.IConfigValidatorFactory;
+import org.apache.asterix.common.api.INamespaceResolver;
 import org.apache.asterix.common.api.INodeJobTracker;
 import org.apache.asterix.common.api.IReceptionistFactory;
 import org.apache.asterix.common.cluster.IGlobalRecoveryManager;
@@ -81,6 +82,7 @@
 import org.apache.asterix.common.external.IAdapterFactoryService;
 import org.apache.asterix.common.library.ILibraryManager;
 import org.apache.asterix.common.metadata.IMetadataLockUtil;
+import org.apache.asterix.common.metadata.NamespaceResolver;
 import org.apache.asterix.common.replication.INcLifecycleCoordinator;
 import org.apache.asterix.common.utils.Servlets;
 import org.apache.asterix.external.adapter.factory.AdapterFactoryService;
@@ -165,7 +167,9 @@
                 new ReplicationProperties(PropertiesAccessor.getInstance(ccServiceCtx.getAppConfig()));
         INcLifecycleCoordinator lifecycleCoordinator = createNcLifeCycleCoordinator(repProp.isReplicationEnabled());
         componentProvider = new StorageComponentProvider();
-        ccExtensionManager = new CCExtensionManager(new ArrayList<>(getExtensions()));
+        boolean cloudDeployment = ccServiceCtx.getAppConfig().getBoolean(CLOUD_DEPLOYMENT);
+        INamespaceResolver namespaceResolver = new NamespaceResolver(cloudDeployment);
+        ccExtensionManager = new CCExtensionManager(new ArrayList<>(getExtensions()), namespaceResolver);
         IGlobalRecoveryManager globalRecoveryManager = createGlobalRecoveryManager();
         final CCConfig ccConfig = controllerService.getCCConfig();
 
@@ -173,14 +177,14 @@
         devices.add(new IODeviceHandle(new File(ccConfig.getGlobalTxLogDir()), "."));
         IOManager ioManager = new IOManager(devices, new DefaultDeviceResolver(), 1, 10);
         CloudProperties cloudProperties = null;
-        if (ccServiceCtx.getAppConfig().getBoolean(CLOUD_DEPLOYMENT)) {
+        if (cloudDeployment) {
             cloudProperties = new CloudProperties(PropertiesAccessor.getInstance(ccServiceCtx.getAppConfig()));
-            ioManager = (IOManager) CloudManagerProvider.createIOManager(cloudProperties, ioManager);;
+            ioManager = (IOManager) CloudManagerProvider.createIOManager(cloudProperties, ioManager);
         }
         IGlobalTxManager globalTxManager = createGlobalTxManager(ioManager);
         appCtx = createApplicationContext(null, globalRecoveryManager, lifecycleCoordinator, Receptionist::new,
                 ConfigValidator::new, ccExtensionManager, new AdapterFactoryService(), globalTxManager, ioManager,
-                cloudProperties);
+                cloudProperties, namespaceResolver);
         if (System.getProperty("java.rmi.server.hostname") == null) {
             System.setProperty("java.rmi.server.hostname", ccConfig.getClusterPublicAddress());
         }
@@ -228,12 +232,12 @@
             IGlobalRecoveryManager globalRecoveryManager, INcLifecycleCoordinator lifecycleCoordinator,
             IReceptionistFactory receptionistFactory, IConfigValidatorFactory configValidatorFactory,
             CCExtensionManager ccExtensionManager, IAdapterFactoryService adapterFactoryService,
-            IGlobalTxManager globalTxManager, IOManager ioManager, CloudProperties cloudProperties)
-            throws AlgebricksException, IOException {
+            IGlobalTxManager globalTxManager, IOManager ioManager, CloudProperties cloudProperties,
+            INamespaceResolver namespaceResolver) throws AlgebricksException, IOException {
         return new CcApplicationContext(ccServiceCtx, hcc, () -> MetadataManager.INSTANCE, globalRecoveryManager,
                 lifecycleCoordinator, new ActiveNotificationHandler(), componentProvider, new MetadataLockManager(),
                 createMetadataLockUtil(), receptionistFactory, configValidatorFactory, ccExtensionManager,
-                adapterFactoryService, globalTxManager, ioManager, cloudProperties);
+                adapterFactoryService, globalTxManager, ioManager, cloudProperties, namespaceResolver);
     }
 
     protected IGlobalRecoveryManager createGlobalRecoveryManager() throws Exception {
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/NCApplication.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/NCApplication.java
index b15ae3e..eea87d8 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/NCApplication.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/NCApplication.java
@@ -25,6 +25,7 @@
 import static org.apache.asterix.common.utils.Servlets.QUERY_STATUS;
 import static org.apache.asterix.common.utils.Servlets.UDF;
 import static org.apache.asterix.common.utils.Servlets.UDF_RECOVERY;
+import static org.apache.hyracks.control.common.controllers.ControllerConfig.Option.CLOUD_DEPLOYMENT;
 
 import java.io.File;
 import java.io.IOException;
@@ -54,6 +55,7 @@
 import org.apache.asterix.app.replication.message.RegistrationTasksRequestMessage;
 import org.apache.asterix.common.api.AsterixThreadFactory;
 import org.apache.asterix.common.api.IConfigValidatorFactory;
+import org.apache.asterix.common.api.INamespaceResolver;
 import org.apache.asterix.common.api.INcApplicationContext;
 import org.apache.asterix.common.api.IPropertiesFactory;
 import org.apache.asterix.common.api.IReceptionistFactory;
@@ -68,6 +70,7 @@
 import org.apache.asterix.common.config.PropertiesFactory;
 import org.apache.asterix.common.config.StorageProperties;
 import org.apache.asterix.common.exceptions.AsterixException;
+import org.apache.asterix.common.metadata.NamespaceResolver;
 import org.apache.asterix.common.replication.IReplicationStrategyFactory;
 import org.apache.asterix.common.replication.ReplicationStrategyFactory;
 import org.apache.asterix.common.transactions.Checkpoint;
@@ -154,8 +157,12 @@
         }
         MetadataBuiltinFunctions.init();
 
-        ncExtensionManager = new NCExtensionManager(new ArrayList<>(getExtensions()), ncServiceCtx);
-        runtimeContext = createNCApplicationContext(ncServiceCtx, ncExtensionManager, getPropertiesFactory());
+        boolean cloudDeployment = ncServiceCtx.getAppConfig().getBoolean(CLOUD_DEPLOYMENT);
+        NamespaceResolver namespaceResolver = new NamespaceResolver(cloudDeployment);
+        ncExtensionManager =
+                new NCExtensionManager(new ArrayList<>(getExtensions()), cloudDeployment, namespaceResolver);
+        runtimeContext =
+                createNCApplicationContext(ncServiceCtx, ncExtensionManager, getPropertiesFactory(), namespaceResolver);
         MetadataProperties metadataProperties = runtimeContext.getMetadataProperties();
         if (!metadataProperties.getNodeNames().contains(this.ncServiceCtx.getNodeId())) {
             if (LOGGER.isInfoEnabled()) {
@@ -188,9 +195,9 @@
     }
 
     protected INcApplicationContext createNCApplicationContext(INCServiceContext ncServiceCtx,
-            NCExtensionManager ncExtensionManager, IPropertiesFactory propertiesFactory)
-            throws IOException, AsterixException {
-        return new NCAppRuntimeContext(ncServiceCtx, ncExtensionManager, propertiesFactory);
+            NCExtensionManager ncExtensionManager, IPropertiesFactory propertiesFactory,
+            INamespaceResolver namespaceResolver) throws IOException, AsterixException {
+        return new NCAppRuntimeContext(ncServiceCtx, ncExtensionManager, propertiesFactory, namespaceResolver);
     }
 
     protected IRecoveryManagerFactory getRecoveryManagerFactory() {
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/utils/ExtensionUtil.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/utils/ExtensionUtil.java
index d29a37c..4374f01 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/utils/ExtensionUtil.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/utils/ExtensionUtil.java
@@ -22,6 +22,7 @@
 import org.apache.asterix.algebra.base.ILangExtension.Language;
 import org.apache.asterix.app.cc.IStatementExecutorExtension;
 import org.apache.asterix.common.api.ExtensionId;
+import org.apache.asterix.common.api.INamespaceResolver;
 import org.apache.asterix.common.exceptions.ErrorCode;
 import org.apache.asterix.common.exceptions.RuntimeDataException;
 import org.apache.asterix.compiler.provider.ILangCompilationProvider;
@@ -53,8 +54,9 @@
      *             if there was a conflict between two extensions
      */
     public static Pair<ExtensionId, ILangCompilationProvider> extendLangCompilationProvider(Language lang,
-            Pair<ExtensionId, ILangCompilationProvider> cp, ILangExtension le) throws RuntimeDataException {
-        ILangCompilationProvider lecp = le.getLangCompilationProvider(lang);
+            Pair<ExtensionId, ILangCompilationProvider> cp, ILangExtension le, INamespaceResolver namespaceResolver)
+            throws RuntimeDataException {
+        ILangCompilationProvider lecp = le.getLangCompilationProvider(lang, namespaceResolver);
         if (cp != null && lecp != null) {
             throw new RuntimeDataException(ErrorCode.EXTENSION_COMPONENT_CONFLICT, le.getId(), cp.first,
                     lang.toString());
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/utils/FeedOperations.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/utils/FeedOperations.java
index 6e1ecdc..11ca118 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/utils/FeedOperations.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/utils/FeedOperations.java
@@ -27,8 +27,6 @@
 import java.util.Map;
 import java.util.Map.Entry;
 
-import org.apache.asterix.app.result.ResponsePrinter;
-import org.apache.asterix.app.translator.DefaultStatementExecutorFactory;
 import org.apache.asterix.common.cluster.PartitioningProperties;
 import org.apache.asterix.common.dataflow.ICcApplicationContext;
 import org.apache.asterix.common.dataflow.LSMTreeInsertDeleteOperatorDescriptor;
@@ -37,7 +35,6 @@
 import org.apache.asterix.common.functions.FunctionSignature;
 import org.apache.asterix.common.metadata.DataverseName;
 import org.apache.asterix.common.transactions.TxnId;
-import org.apache.asterix.compiler.provider.SqlppCompilationProvider;
 import org.apache.asterix.external.api.ITypedAdapterFactory;
 import org.apache.asterix.external.feed.management.FeedConnectionId;
 import org.apache.asterix.external.feed.policy.FeedPolicyAccessor;
@@ -47,7 +44,6 @@
 import org.apache.asterix.external.operators.FeedMetaOperatorDescriptor;
 import org.apache.asterix.external.util.ExternalDataUtils;
 import org.apache.asterix.external.util.FeedUtils.FeedRuntimeType;
-import org.apache.asterix.file.StorageComponentProvider;
 import org.apache.asterix.lang.common.base.Expression;
 import org.apache.asterix.lang.common.base.IParser;
 import org.apache.asterix.lang.common.base.IParserFactory;
@@ -85,7 +81,6 @@
 import org.apache.asterix.runtime.utils.RuntimeUtils;
 import org.apache.asterix.translator.CompiledStatements;
 import org.apache.asterix.translator.IStatementExecutor;
-import org.apache.asterix.translator.SessionOutput;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.tuple.Pair;
 import org.apache.hyracks.algebricks.common.constraints.AlgebricksAbsolutePartitionConstraint;
@@ -178,7 +173,8 @@
         return argExprs;
     }
 
-    private static Query makeConnectionQuery(FeedConnection feedConnection) throws AlgebricksException {
+    private static Query makeConnectionQuery(FeedConnection feedConnection, MetadataProvider md)
+            throws AlgebricksException {
         // Construct from clause
         VarIdentifier fromVarId = SqlppVariableUtil.toInternalVariableIdentifier(feedConnection.getFeedName());
         VariableExpr fromTermLeftExpr = new VariableExpr(fromVarId);
@@ -193,7 +189,7 @@
         WhereClause whereClause = null;
         if (feedConnection.getWhereClauseBody().length() != 0) {
             String whereClauseExpr = feedConnection.getWhereClauseBody() + ";";
-            IParserFactory sqlppParserFactory = new SqlppParserFactory();
+            IParserFactory sqlppParserFactory = new SqlppParserFactory(md.getNamespaceResolver());
             IParser sqlppParser = sqlppParserFactory.createParser(whereClauseExpr);
             List<Statement> stmts = sqlppParser.parse();
             if (stmts.size() != 1) {
@@ -224,7 +220,7 @@
             IStatementExecutor statementExecutor, IHyracksClientConnection hcc, Boolean insertFeed)
             throws AlgebricksException, RemoteException, ACIDException {
         metadataProvider.getConfig().put(FeedActivityDetails.FEED_POLICY_NAME, feedConn.getPolicyName());
-        Query feedConnQuery = makeConnectionQuery(feedConn);
+        Query feedConnQuery = makeConnectionQuery(feedConn, metadataProvider);
         CompiledStatements.ICompiledDmlStatement clfrqs;
         if (insertFeed) {
             InsertStatement stmtUpsert = new InsertStatement(feedConn.getDataverseName(), feedConn.getDatasetName(),
@@ -421,15 +417,6 @@
         return jobSpec;
     }
 
-    private static IStatementExecutor getSQLPPTranslator(MetadataProvider metadataProvider,
-            SessionOutput sessionOutput) {
-        List<Statement> stmts = new ArrayList<>();
-        DefaultStatementExecutorFactory qtFactory = new DefaultStatementExecutorFactory();
-        IStatementExecutor translator = qtFactory.create(metadataProvider.getApplicationContext(), stmts, sessionOutput,
-                new SqlppCompilationProvider(), new StorageComponentProvider(), new ResponsePrinter(sessionOutput));
-        return translator;
-    }
-
     public static Pair<JobSpecification, AlgebricksAbsolutePartitionConstraint> buildStartFeedJob(
             MetadataProvider metadataProvider, Feed feed, List<FeedConnection> feedConnections,
             IStatementExecutor statementExecutor, IHyracksClientConnection hcc) throws Exception {
diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/dml/DmlTest.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/dml/DmlTest.java
index e015ffc..93f513d 100644
--- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/dml/DmlTest.java
+++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/dml/DmlTest.java
@@ -30,6 +30,7 @@
 import org.apache.asterix.app.translator.DefaultStatementExecutorFactory;
 import org.apache.asterix.common.dataflow.ICcApplicationContext;
 import org.apache.asterix.common.exceptions.AsterixException;
+import org.apache.asterix.common.metadata.NamespaceResolver;
 import org.apache.asterix.compiler.provider.SqlppCompilationProvider;
 import org.apache.asterix.file.StorageComponentProvider;
 import org.apache.asterix.test.base.AsterixTestHelper;
@@ -64,7 +65,8 @@
                 new BufferedReader(new InputStreamReader(new FileInputStream(LOAD_FOR_ENLIST_FILE), "UTF-8"));
         AsterixJavaClient asterixLoad =
                 new AsterixJavaClient((ICcApplicationContext) integrationUtil.cc.getApplicationContext(),
-                        integrationUtil.getHyracksClientConnection(), loadReader, ERR, new SqlppCompilationProvider(),
+                        integrationUtil.getHyracksClientConnection(), loadReader, ERR,
+                        new SqlppCompilationProvider(new NamespaceResolver(false)),
                         new DefaultStatementExecutorFactory(), new StorageComponentProvider());
         try {
             asterixLoad.compile(true, false, false, false, false, true, false);
diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/optimizer/AbstractOptimizerTest.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/optimizer/AbstractOptimizerTest.java
index 8126d1e..e24eb98 100644
--- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/optimizer/AbstractOptimizerTest.java
+++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/optimizer/AbstractOptimizerTest.java
@@ -31,6 +31,7 @@
 import org.apache.asterix.app.translator.DefaultStatementExecutorFactory;
 import org.apache.asterix.common.config.GlobalConfig;
 import org.apache.asterix.common.context.IStorageComponentProvider;
+import org.apache.asterix.common.metadata.NamespaceResolver;
 import org.apache.asterix.compiler.provider.ILangCompilationProvider;
 import org.apache.asterix.compiler.provider.SqlppCompilationProvider;
 import org.apache.asterix.external.util.ExternalDataConstants;
@@ -71,7 +72,8 @@
     protected static final ArrayList<String> ignore = AsterixTestHelper.readTestListFile(FILENAME_IGNORE, PATH_BASE);
     protected static final ArrayList<String> only = AsterixTestHelper.readTestListFile(FILENAME_ONLY, PATH_BASE);
     protected static String TEST_CONFIG_FILE_NAME = "src/main/resources/cc.conf";
-    protected static final ILangCompilationProvider sqlppCompilationProvider = new SqlppCompilationProvider();
+    protected static final ILangCompilationProvider sqlppCompilationProvider =
+            new SqlppCompilationProvider(new NamespaceResolver(false));
     protected static ILangCompilationProvider extensionLangCompilationProvider = null;
     protected static IStatementExecutorFactory statementExecutorFactory = new DefaultStatementExecutorFactory();
     protected static IStorageComponentProvider storageComponentProvider = new StorageComponentProvider();
diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/sqlpp/DataverseNameParserTest.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/sqlpp/DataverseNameParserTest.java
index 0d4d611..9d03abf 100644
--- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/sqlpp/DataverseNameParserTest.java
+++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/sqlpp/DataverseNameParserTest.java
@@ -23,6 +23,7 @@
 
 import org.apache.asterix.common.metadata.DataverseName;
 import org.apache.asterix.common.metadata.DataverseNameTest;
+import org.apache.asterix.common.metadata.NamespaceResolver;
 import org.apache.asterix.lang.common.base.IParser;
 import org.apache.asterix.lang.common.base.IParserFactory;
 import org.apache.asterix.lang.sqlpp.parser.SqlppParserFactory;
@@ -30,7 +31,7 @@
 
 public class DataverseNameParserTest extends DataverseNameTest {
 
-    private final IParserFactory parserFactory = new SqlppParserFactory();
+    private final IParserFactory parserFactory = new SqlppParserFactory(new NamespaceResolver(false));
 
     @Override
     protected void testDataverseNameImpl(DataverseName dataverseName, List<String> parts, String expectedCanonicalForm,
diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/sqlpp/ParserTestExecutor.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/sqlpp/ParserTestExecutor.java
index e9278d0..3b0e977 100644
--- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/sqlpp/ParserTestExecutor.java
+++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/sqlpp/ParserTestExecutor.java
@@ -43,6 +43,7 @@
 import org.apache.asterix.common.metadata.DataverseName;
 import org.apache.asterix.common.metadata.MetadataConstants;
 import org.apache.asterix.common.metadata.MetadataUtil;
+import org.apache.asterix.common.metadata.NamespaceResolver;
 import org.apache.asterix.lang.common.base.IParser;
 import org.apache.asterix.lang.common.base.IParserFactory;
 import org.apache.asterix.lang.common.base.IQueryRewriter;
@@ -79,7 +80,7 @@
 
 public class ParserTestExecutor extends TestExecutor {
 
-    private IParserFactory sqlppParserFactory = new SqlppParserFactory();
+    private IParserFactory sqlppParserFactory = new SqlppParserFactory(new NamespaceResolver(false));
     private IRewriterFactory sqlppRewriterFactory = new SqlppRewriterFactory(sqlppParserFactory);
     private Set<FunctionSignature> createdFunctions = new HashSet<>();
 
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/feeds/feeds_01/feeds_01.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/feeds/feeds_01/feeds_01.3.query.sqlpp
index f4862f2..3b2c900 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/feeds/feeds_01/feeds_01.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/feeds/feeds_01/feeds_01.3.query.sqlpp
@@ -21,8 +21,12 @@
  * Expected Res : Success
  * Date         : 24th Dec 2012
  */
+-- compareunorderedarray=true
 
-select element x
+select element y
 from  `Metadata`.`Feed` as x
+let y = OBJECT_CONCAT( { "AdapterConfiguration" : to_array(x.AdapterConfiguration)},
+                       OBJECT_REMOVE(x, "AdapterConfiguration")
+                     )
 where ((x.DataverseName = 'feeds') and (x.FeedName = 'TweetFeed'))
 ;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/feeds/feeds_01/feeds_01.1.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/feeds/feeds_01/feeds_01.1.adm
deleted file mode 100644
index f932438a..0000000
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/feeds/feeds_01/feeds_01.1.adm
+++ /dev/null
@@ -1 +0,0 @@
-{ "DataverseName": "feeds", "FeedName": "TweetFeed", "AdapterConfiguration": {{ { "Name": "dataset-dataverse", "Value": "feeds" }, { "Name": "path", "Value": "asterix_nc1://data/twitter/obamatweets.adm" }, { "Name": "feed", "Value": "TweetFeed" }, { "Name": "log-ingestion-events", "Value": "true" }, { "Name": "dataset-database", "Value": "Default" }, { "Name": "adapter-name", "Value": "localfs" }, { "Name": "is-feed", "Value": "true" }, { "Name": "parser", "Value": "adm" }, { "Name": "reader", "Value": "localfs" }, { "Name": "format", "Value": "adm" }, { "Name": "tuple-interval", "Value": "10" }, { "Name": "type-name", "Value": "TweetType" } }}, "Timestamp": "Mon May 08 20:53:16 PDT 2023" }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/feeds/feeds_01/feeds_01.1.regexjson b/asterixdb/asterix-app/src/test/resources/runtimets/results/feeds/feeds_01/feeds_01.1.regexjson
new file mode 100644
index 0000000..c3356bc
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/feeds/feeds_01/feeds_01.1.regexjson
@@ -0,0 +1,56 @@
+{
+    "DataverseName": "feeds",
+    "FeedName": "TweetFeed",
+    "AdapterConfiguration":
+    [
+        {
+            "Name": "dataset-dataverse",
+            "Value": "feeds"
+        },
+        {
+            "Name": "path",
+            "Value": "asterix_nc1://data/twitter/obamatweets.adm"
+        },
+        {
+            "Name": "feed",
+            "Value": "TweetFeed"
+        },
+        {
+            "Name": "log-ingestion-events",
+            "Value": "true"
+        },
+        {
+            "Name": "dataset-database",
+            "Value": "Default"
+        },
+        {
+            "Name": "adapter-name",
+            "Value": "localfs"
+        },
+        {
+            "Name": "is-feed",
+            "Value": "true"
+        },
+        {
+            "Name": "parser",
+            "Value": "adm"
+        },
+        {
+            "Name": "reader",
+            "Value": "localfs"
+        },
+        {
+            "Name": "format",
+            "Value": "adm"
+        },
+        {
+            "Name": "tuple-interval",
+            "Value": "10"
+        },
+        {
+            "Name": "type-name",
+            "Value": "TweetType"
+        }
+    ],
+    "Timestamp": "R{.*}"
+}
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_cloud/feeds/feeds_01/feeds_01.1.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results_cloud/feeds/feeds_01/feeds_01.1.adm
deleted file mode 100644
index 751025d..0000000
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_cloud/feeds/feeds_01/feeds_01.1.adm
+++ /dev/null
@@ -1 +0,0 @@
-{ "DatabaseName": "Default", "DataverseName": "feeds", "FeedName": "TweetFeed", "AdapterConfiguration": {{ { "Name": "dataset-dataverse", "Value": "feeds" }, { "Name": "path", "Value": "asterix_nc1://data/twitter/obamatweets.adm" }, { "Name": "feed", "Value": "TweetFeed" }, { "Name": "log-ingestion-events", "Value": "true" }, { "Name": "dataset-database", "Value": "Default" }, { "Name": "adapter-name", "Value": "localfs" }, { "Name": "is-feed", "Value": "true" }, { "Name": "parser", "Value": "adm" }, { "Name": "reader", "Value": "localfs" }, { "Name": "format", "Value": "adm" }, { "Name": "tuple-interval", "Value": "10" }, { "Name": "type-name", "Value": "TweetType" } }}, "Timestamp": "Fri Oct 06 12:58:13 PDT 2023" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_cloud/feeds/feeds_01/feeds_01.1.regexjson b/asterixdb/asterix-app/src/test/resources/runtimets/results_cloud/feeds/feeds_01/feeds_01.1.regexjson
new file mode 100644
index 0000000..7505f53
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_cloud/feeds/feeds_01/feeds_01.1.regexjson
@@ -0,0 +1,57 @@
+{
+    "DatabaseName": "Default",
+    "DataverseName": "feeds",
+    "FeedName": "TweetFeed",
+    "AdapterConfiguration":
+    [
+        {
+            "Name": "dataset-dataverse",
+            "Value": "feeds"
+        },
+        {
+            "Name": "path",
+            "Value": "asterix_nc1://data/twitter/obamatweets.adm"
+        },
+        {
+            "Name": "feed",
+            "Value": "TweetFeed"
+        },
+        {
+            "Name": "log-ingestion-events",
+            "Value": "true"
+        },
+        {
+            "Name": "dataset-database",
+            "Value": "Default"
+        },
+        {
+            "Name": "adapter-name",
+            "Value": "localfs"
+        },
+        {
+            "Name": "is-feed",
+            "Value": "true"
+        },
+        {
+            "Name": "parser",
+            "Value": "adm"
+        },
+        {
+            "Name": "reader",
+            "Value": "localfs"
+        },
+        {
+            "Name": "format",
+            "Value": "adm"
+        },
+        {
+            "Name": "tuple-interval",
+            "Value": "10"
+        },
+        {
+            "Name": "type-name",
+            "Value": "TweetType"
+        }
+    ],
+    "Timestamp": "R{.*}"
+}
\ No newline at end of file
diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/api/INamespaceResolver.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/api/INamespaceResolver.java
index f281280..a552dfb 100644
--- a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/api/INamespaceResolver.java
+++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/api/INamespaceResolver.java
@@ -18,11 +18,15 @@
  */
 package org.apache.asterix.common.api;
 
-import org.apache.asterix.common.metadata.DataverseName;
+import java.util.List;
+
+import org.apache.asterix.common.exceptions.AsterixException;
 import org.apache.asterix.common.metadata.Namespace;
 
 public interface INamespaceResolver {
 
-    Namespace resolve(DataverseName dataverseName);
+    Namespace resolve(List<String> multiIdentifier) throws AsterixException;
+
+    Namespace resolve(String namespace) throws AsterixException;
 
 }
diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/metadata/NamespaceResolver.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/metadata/NamespaceResolver.java
index 14bba84..011432b 100644
--- a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/metadata/NamespaceResolver.java
+++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/metadata/NamespaceResolver.java
@@ -19,7 +19,10 @@
 
 package org.apache.asterix.common.metadata;
 
+import java.util.List;
+
 import org.apache.asterix.common.api.INamespaceResolver;
+import org.apache.asterix.common.exceptions.AsterixException;
 
 public class NamespaceResolver implements INamespaceResolver {
 
@@ -30,10 +33,17 @@
     }
 
     @Override
-    public Namespace resolve(DataverseName dataverseName) {
-        if (dataverseName == null) {
+    public Namespace resolve(List<String> multiIdentifier) throws AsterixException {
+        if (multiIdentifier == null) {
             return null;
         }
+        DataverseName dataverseName = DataverseName.create(multiIdentifier);
+        return new Namespace(MetadataUtil.databaseFor(dataverseName), dataverseName);
+    }
+
+    @Override
+    public Namespace resolve(String namespace) throws AsterixException {
+        DataverseName dataverseName = DataverseName.createFromCanonicalForm(namespace);
         return new Namespace(MetadataUtil.databaseFor(dataverseName), dataverseName);
     }
 }
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/DataverseDecl.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/DataverseDecl.java
index b901819..dd22950 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/DataverseDecl.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/DataverseDecl.java
@@ -18,29 +18,36 @@
  */
 package org.apache.asterix.lang.common.statement;
 
+import java.util.Objects;
+
 import org.apache.asterix.common.exceptions.CompilationException;
 import org.apache.asterix.common.metadata.DataverseName;
+import org.apache.asterix.common.metadata.Namespace;
 import org.apache.asterix.lang.common.base.AbstractStatement;
 import org.apache.asterix.lang.common.base.Statement;
 import org.apache.asterix.lang.common.visitor.base.ILangVisitor;
 
 public class DataverseDecl extends AbstractStatement {
 
-    private DataverseName dataverseName;
+    private final Namespace namespace;
 
-    private boolean ifExists;
+    private final boolean ifExists;
 
-    public DataverseDecl(DataverseName dataverseName) {
-        this(dataverseName, false);
+    public DataverseDecl(Namespace namespace) {
+        this(namespace, false);
     }
 
-    public DataverseDecl(DataverseName dataverseName, boolean ifExists) {
-        this.dataverseName = dataverseName;
+    public DataverseDecl(Namespace namespace, boolean ifExists) {
+        this.namespace = Objects.requireNonNull(namespace);
         this.ifExists = ifExists;
     }
 
     public DataverseName getDataverseName() {
-        return dataverseName;
+        return namespace.getDataverseName();
+    }
+
+    public String getDatabaseName() {
+        return namespace.getDatabaseName();
     }
 
     public boolean getIfExists() {
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/parser/SqlppParserFactory.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/parser/SqlppParserFactory.java
index 5b724f2..98c53d6 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/parser/SqlppParserFactory.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/parser/SqlppParserFactory.java
@@ -20,6 +20,7 @@
 
 import java.io.Reader;
 
+import org.apache.asterix.common.api.INamespaceResolver;
 import org.apache.asterix.lang.common.base.IParser;
 import org.apache.asterix.lang.common.base.IParserFactory;
 
@@ -28,14 +29,20 @@
     // WARNING: This value is stored in function metadata. Do not modify.
     public static final String SQLPP = "SQLPP";
 
+    protected final INamespaceResolver namespaceResolver;
+
+    public SqlppParserFactory(INamespaceResolver namespaceResolver) {
+        this.namespaceResolver = namespaceResolver;
+    }
+
     @Override
     public IParser createParser(String query) {
-        return new SQLPPParser(query);
+        return new SQLPPParser(query, namespaceResolver);
     }
 
     @Override
     public IParser createParser(Reader reader) {
-        return new SQLPPParser(reader);
+        return new SQLPPParser(reader, namespaceResolver);
     }
 
     @Override
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj b/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj
index 732c4e8..b5dd4c4 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj
+++ b/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj
@@ -67,6 +67,7 @@
 import org.apache.asterix.common.annotations.SpatialJoinAnnotation;
 import org.apache.asterix.common.annotations.TypeDataGen;
 import org.apache.asterix.common.annotations.UndeclaredFieldsDataGen;
+import org.apache.asterix.common.api.INamespaceResolver;
 import org.apache.asterix.common.config.DatasetConfig.DatasetType;
 import org.apache.asterix.common.config.DatasetConfig.IndexType;
 import org.apache.asterix.common.exceptions.AsterixException;
@@ -79,6 +80,8 @@
 import org.apache.asterix.common.metadata.DatasetFullyQualifiedName;
 import org.apache.asterix.common.metadata.MetadataConstants;
 import org.apache.asterix.common.metadata.MetadataUtil;
+import org.apache.asterix.common.metadata.Namespace;
+import org.apache.asterix.common.metadata.NamespaceResolver;
 import org.apache.asterix.external.dataset.adapter.AdapterIdentifier;
 import org.apache.asterix.lang.common.base.AbstractClause;
 import org.apache.asterix.lang.common.base.AbstractLangExpression;
@@ -290,6 +293,8 @@
 
     private final Map<SourceLocation, String> hintCollector = new HashMap<SourceLocation, String>();
 
+    private INamespaceResolver namespaceResolver;
+
     private static class IndexParams {
       public IndexType type;
       public int gramLength;
@@ -361,15 +366,22 @@
       }
     }
 
-    public SQLPPParser(String s) {
+    public SQLPPParser(String s, INamespaceResolver namespaceResolver) {
         this(new StringReader(s));
         super.setInput(s);
+        this.namespaceResolver = namespaceResolver;
+    }
+
+    public SQLPPParser(Reader is, INamespaceResolver namespaceResolver) {
+        this(is);
+        this.namespaceResolver = namespaceResolver;
     }
 
     public static void main(String[] args) throws ParseException, TokenMgrError, IOException, FileNotFoundException, CompilationException {
         File file = new File(args[0]);
         Reader fis = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"));
         SQLPPParser parser = new SQLPPParser(fis);
+        parser.namespaceResolver = new NamespaceResolver(false);
         List<Statement> st = parser.parse();
         //st.accept(new SQLPPPrintVisitor(), 0);
     }
@@ -394,8 +406,8 @@
         });
     }
 
-    private static Expression parseExpression(String text) throws CompilationException {
-        return new SQLPPParser(text).parseExpression();
+    private static Expression parseExpression(String text, INamespaceResolver nsr) throws CompilationException {
+        return new SQLPPParser(text, nsr).parseExpression();
     }
 
     @Override
@@ -417,8 +429,8 @@
         });
     }
 
-    private static List<String> parseParenthesizedIdentifierList(String text) throws CompilationException {
-        return new SQLPPParser(text).parseParenthesizedIdentifierList();
+    private static List<String> parseParenthesizedIdentifierList(String text, INamespaceResolver nsr) throws CompilationException {
+        return new SQLPPParser(text, nsr).parseParenthesizedIdentifierList();
     }
 
     private Pair<HashJoinExpressionAnnotation.BuildOrProbe, String> parseHashJoinParams() throws CompilationException {
@@ -430,8 +442,8 @@
         });
     }
 
-    private static Pair<HashJoinExpressionAnnotation.BuildOrProbe, String> parseHashJoinParams(String text) throws CompilationException {
-        return new SQLPPParser(text).parseHashJoinParams();
+    private static Pair<HashJoinExpressionAnnotation.BuildOrProbe, String> parseHashJoinParams(String text, INamespaceResolver nsr) throws CompilationException {
+        return new SQLPPParser(text, nsr).parseHashJoinParams();
     }
 
     private String parseBroadcastJoinParams() throws CompilationException {
@@ -443,8 +455,8 @@
             });
         }
 
-    private static String parseBroadcastJoinParams(String text) throws CompilationException {
-        return new SQLPPParser(text).parseBroadcastJoinParams();
+    private static String parseBroadcastJoinParams(String text, INamespaceResolver nsr) throws CompilationException {
+        return new SQLPPParser(text, nsr).parseBroadcastJoinParams();
     }
 
     private List<Literal> parseParenthesizedLiteralList() throws CompilationException {
@@ -456,8 +468,8 @@
         });
     }
 
-    private static List<Literal> parseParenthesizedLiteralList(String text) throws CompilationException {
-        return new SQLPPParser(text).parseParenthesizedLiteralList();
+    private static List<Literal> parseParenthesizedLiteralList(String text, INamespaceResolver nsr) throws CompilationException {
+        return new SQLPPParser(text, nsr).parseParenthesizedLiteralList();
     }
 
     @Override
@@ -754,7 +766,7 @@
             }
             else {
               // if parameter parsing fails then ignore this hint.
-              String name = parseBroadcastJoinParams(hintToken.hintParams);
+              String name = parseBroadcastJoinParams(hintToken.hintParams, this.namespaceResolver);
               return new BroadcastExpressionAnnotation(name);
             }
           case HASH_JOIN_HINT:
@@ -763,7 +775,7 @@
             }
             else {
               // if parameter parsing fails then ignore this hint.
-              Pair<HashJoinExpressionAnnotation.BuildOrProbe, String> pair = parseHashJoinParams(hintToken.hintParams);
+              Pair<HashJoinExpressionAnnotation.BuildOrProbe, String> pair = parseHashJoinParams(hintToken.hintParams, this.namespaceResolver);
               return new HashJoinExpressionAnnotation(pair);
             }
           case INDEXED_NESTED_LOOP_JOIN_HINT:
@@ -772,11 +784,11 @@
             } else {
               // if parameter parsing fails then return hint annotation without parameters
               onParseErrorReturn = IndexedNLJoinExpressionAnnotation.INSTANCE_ANY_INDEX;
-              List<String> indexNames = parseParenthesizedIdentifierList(hintToken.hintParams);
+              List<String> indexNames = parseParenthesizedIdentifierList(hintToken.hintParams, this.namespaceResolver);
               return IndexedNLJoinExpressionAnnotation.newInstance(indexNames);
             }
           case RANGE_HINT:
-            Expression rangeExpr = parseExpression(hintToken.hintParams);
+            Expression rangeExpr = parseExpression(hintToken.hintParams, this.namespaceResolver);
             RangeMap rangeMap = RangeMapBuilder.parseHint(rangeExpr);
             return new RangeAnnotation(rangeMap);
           case SKIP_SECONDARY_INDEX_SEARCH_HINT:
@@ -784,11 +796,11 @@
               return SkipSecondaryIndexSearchExpressionAnnotation.INSTANCE_ANY_INDEX;
             } else {
               // if parameter parsing fails then ignore this hint
-              List<String> indexNames = parseParenthesizedIdentifierList(hintToken.hintParams);
+              List<String> indexNames = parseParenthesizedIdentifierList(hintToken.hintParams, this.namespaceResolver);
               return SkipSecondaryIndexSearchExpressionAnnotation.newInstance(indexNames);
             }
           case SPATIAL_JOIN_HINT:
-            List<Literal> hintValues = parseParenthesizedLiteralList(hintToken.hintParams);
+            List<Literal> hintValues = parseParenthesizedLiteralList(hintToken.hintParams, this.namespaceResolver);
 
             // Handle exceptions
             if (hintValues.size() != 6) {
@@ -833,7 +845,7 @@
               throw new SqlppParseException(getSourceLocation(hintToken), "Expected index name(s)");
             } else {
               // if parameter parsing fails then ignore this hint
-              List<String> indexNames = parseParenthesizedIdentifierList(hintToken.hintParams);
+              List<String> indexNames = parseParenthesizedIdentifierList(hintToken.hintParams, this.namespaceResolver);
               return SecondaryIndexSearchPreferenceAnnotation.newInstance(indexNames);
             }
           default:
@@ -887,6 +899,16 @@
       }
     }
 
+    private Namespace createNamespace(List<String> parts, Token startToken) throws SqlppParseException {
+      try {
+        return namespaceResolver.resolve(parts);
+      } catch (AsterixException e) {
+        SqlppParseException pe = new SqlppParseException(getSourceLocation(startToken), e.getMessage());
+        pe.initCause(e);
+        throw pe;
+      }
+    }
+
     private void validatePKFields(Object primaryKeyFields, Token startToken) throws SqlppParseException {
       if (primaryKeyFields == null) {
         throw new SqlppParseException(getSourceLocation(startToken), "Invalid primary key specification.");
@@ -968,14 +990,16 @@
 DataverseDecl DataverseDeclaration() throws ParseException:
 {
   Token startToken = null;
-  DataverseName dvName = null;
+  Namespace ns = null;
+  Triple<List<String>, Token, Token> ident = null;
 }
 {
-  <USE> { startToken = token; } dvName = DataverseName()
+  <USE> { startToken = token; } ident = MultipartIdentifier()
     {
-      defaultDataverse = dvName;
-      defaultDatabase = MetadataUtil.databaseFor(dvName);
-      DataverseDecl dvDecl = new DataverseDecl(defaultDataverse);
+      ns = createNamespace(ident.first, ident.second);
+      defaultDataverse = ns.getDataverseName();
+      defaultDatabase = ns.getDatabaseName();
+      DataverseDecl dvDecl = new DataverseDecl(ns);
       return addSourceLocation(dvDecl, startToken);
     }
 }
@@ -5337,7 +5361,7 @@
           break;
         case RANGE_HINT:
           try {
-            Expression rangeExpr = parseExpression(hintToken.hintParams);
+            Expression rangeExpr = parseExpression(hintToken.hintParams, this.namespaceResolver);
             RangeMap rangeMap = RangeMapBuilder.parseHint(rangeExpr);
             oc.setRangeMap(rangeMap);
           } catch (CompilationException e) {
diff --git a/asterixdb/asterix-lang-sqlpp/src/test/java/org/apache/asterix/lang/sqlpp/parser/ParserTest.java b/asterixdb/asterix-lang-sqlpp/src/test/java/org/apache/asterix/lang/sqlpp/parser/ParserTest.java
index 8413c38..256f644 100644
--- a/asterixdb/asterix-lang-sqlpp/src/test/java/org/apache/asterix/lang/sqlpp/parser/ParserTest.java
+++ b/asterixdb/asterix-lang-sqlpp/src/test/java/org/apache/asterix/lang/sqlpp/parser/ParserTest.java
@@ -19,6 +19,7 @@
 package org.apache.asterix.lang.sqlpp.parser;
 
 import org.apache.asterix.common.exceptions.CompilationException;
+import org.apache.asterix.common.metadata.NamespaceResolver;
 import org.apache.asterix.lang.common.base.Expression;
 import org.apache.asterix.lang.common.base.IParser;
 import org.apache.asterix.lang.common.base.IParserFactory;
@@ -30,7 +31,7 @@
 public class ParserTest {
 
     protected void assertParseError(String query, int expectedErrorLine) throws Exception {
-        IParserFactory factory = new SqlppParserFactory();
+        IParserFactory factory = new SqlppParserFactory(new NamespaceResolver(false));
         IParser parser = factory.createParser(query);
         try {
             parser.parse();
@@ -64,7 +65,7 @@
     @Test
     public void testMultipleStatements() throws Exception {
         String query = "use x;\nselect 1;";
-        IParserFactory factory = new SqlppParserFactory();
+        IParserFactory factory = new SqlppParserFactory(new NamespaceResolver(false));
         IParser parser = factory.createParser(query);
         parser.parse();
         query = "use x;\n use x;;;;\n use x;\n select 1;";
@@ -85,7 +86,7 @@
     @Test
     public void testEmptyStatement() throws Exception {
         String query = "";
-        IParserFactory factory = new SqlppParserFactory();
+        IParserFactory factory = new SqlppParserFactory(new NamespaceResolver(false));
         IParser parser = factory.createParser(query);
         parser.parse();
 
@@ -117,7 +118,7 @@
         String[] prefixes = new String[] { "", "E" };
         String[] quotes = new String[] { "'", "\"" };
 
-        IParserFactory factory = new SqlppParserFactory();
+        IParserFactory factory = new SqlppParserFactory(new NamespaceResolver(false));
         StringBuilder qb = new StringBuilder();
 
         for (String p : prefixes) {
@@ -142,7 +143,7 @@
         String[] prefixesRest = new String[] { "", "E", " ", "\n" };
         String[] quotes = new String[] { "'", "\"" };
 
-        IParserFactory factory = new SqlppParserFactory();
+        IParserFactory factory = new SqlppParserFactory(new NamespaceResolver(false));
         StringBuilder qb = new StringBuilder();
         for (String p1 : prefixesStart) {
             for (String q1 : quotes) {
diff --git a/asterixdb/asterix-lang-sqlpp/src/test/java/org/apache/asterix/lang/sqlpp/parser/SqlppGroupingSetsParserTest.java b/asterixdb/asterix-lang-sqlpp/src/test/java/org/apache/asterix/lang/sqlpp/parser/SqlppGroupingSetsParserTest.java
index 42ba8bc..9549b5d 100644
--- a/asterixdb/asterix-lang-sqlpp/src/test/java/org/apache/asterix/lang/sqlpp/parser/SqlppGroupingSetsParserTest.java
+++ b/asterixdb/asterix-lang-sqlpp/src/test/java/org/apache/asterix/lang/sqlpp/parser/SqlppGroupingSetsParserTest.java
@@ -30,6 +30,7 @@
 
 import org.apache.asterix.common.exceptions.CompilationException;
 import org.apache.asterix.common.exceptions.ErrorCode;
+import org.apache.asterix.common.metadata.NamespaceResolver;
 import org.apache.asterix.lang.common.base.Expression;
 import org.apache.asterix.lang.common.base.ILangExpression;
 import org.apache.asterix.lang.common.base.IParser;
@@ -219,7 +220,7 @@
 
     @Test
     public void test() throws Exception {
-        SqlppParserFactory parserFactory = new SqlppParserFactory();
+        SqlppParserFactory parserFactory = new SqlppParserFactory(new NamespaceResolver(false));
         String groupbyClause = "GROUP BY " + groupbyInput;
         String query = "SELECT COUNT(*) FROM test " + groupbyClause + ";";
         // parse 2 queries so we can test calling rewrite() multiple times on the same instance
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/IMetadataExtension.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/IMetadataExtension.java
index 8831214..d9037cc 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/IMetadataExtension.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/IMetadataExtension.java
@@ -48,7 +48,7 @@
      */
     MetadataTupleTranslatorProvider getMetadataTupleTranslatorProvider(MetadataIndexesProvider metadataIndexesProvider);
 
-    MetadataIndexesProvider getMetadataIndexesProvider(INCServiceContext ncServiceCtx);
+    MetadataIndexesProvider getMetadataIndexesProvider(boolean usingDatabase);
 
     /**
      * @return A list of additional extension instances of {@code IMetadataIndex} that are introduced by the extension
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/MetadataIndexesProvider.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/MetadataIndexesProvider.java
index 7dadde3..18857a3 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/MetadataIndexesProvider.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/MetadataIndexesProvider.java
@@ -18,17 +18,14 @@
  */
 package org.apache.asterix.metadata.bootstrap;
 
-import static org.apache.hyracks.control.common.controllers.ControllerConfig.Option.CLOUD_DEPLOYMENT;
-
 import org.apache.asterix.metadata.api.IMetadataIndex;
-import org.apache.hyracks.api.application.INCServiceContext;
 
 public class MetadataIndexesProvider {
 
     protected final boolean usingDatabase;
 
-    public MetadataIndexesProvider(INCServiceContext ncServiceCtx) {
-        usingDatabase = ncServiceCtx.getAppConfig().getBoolean(CLOUD_DEPLOYMENT);
+    public MetadataIndexesProvider(boolean usingDatabase) {
+        this.usingDatabase = usingDatabase;
     }
 
     public DatabaseEntity getDatabaseEntity() {
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 8dcfeaf..f37e79e 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
@@ -336,6 +336,10 @@
         this.dataFormat = dataFormat;
     }
 
+    public INamespaceResolver getNamespaceResolver() {
+        return namespaceResolver;
+    }
+
     public StorageProperties getStorageProperties() {
         return storageProperties;
     }
@@ -1826,8 +1830,8 @@
         return storageComponentProvider;
     }
 
-    public Namespace resolve(DataverseName dataverseName) {
-        return namespaceResolver.resolve(dataverseName);
+    public Namespace resolve(List<String> multiIdent) throws AsterixException {
+        return namespaceResolver.resolve(multiIdent);
     }
 
     public PartitioningProperties getPartitioningProperties(Index idx) throws AlgebricksException {
diff --git a/asterixdb/asterix-tools/src/test/java/org/apache/asterix/tools/datagen/AdmDataGen.java b/asterixdb/asterix-tools/src/test/java/org/apache/asterix/tools/datagen/AdmDataGen.java
index aa86916..e9dc549 100644
--- a/asterixdb/asterix-tools/src/test/java/org/apache/asterix/tools/datagen/AdmDataGen.java
+++ b/asterixdb/asterix-tools/src/test/java/org/apache/asterix/tools/datagen/AdmDataGen.java
@@ -46,6 +46,7 @@
 import org.apache.asterix.common.annotations.TypeDataGen;
 import org.apache.asterix.common.annotations.UndeclaredFieldsDataGen;
 import org.apache.asterix.common.exceptions.ACIDException;
+import org.apache.asterix.common.metadata.NamespaceResolver;
 import org.apache.asterix.common.transactions.TxnId;
 import org.apache.asterix.lang.common.base.IParser;
 import org.apache.asterix.lang.common.base.IParserFactory;
@@ -927,7 +928,7 @@
     private Map<TypeSignature, IAType> typeMap;
     private Map<TypeSignature, TypeDataGen> typeAnnotMap;
     private DataGeneratorContext dgCtx;
-    private final IParserFactory parserFactory = new SqlppParserFactory();
+    private final IParserFactory parserFactory = new SqlppParserFactory(new NamespaceResolver(false));
 
     public AdmDataGen(File schemaFile, File outputDir) {
         this.schemaFile = schemaFile;
