[ASTERIXDB-3259][MTD] Make SQLPP parser use namespace resolver

- user model changes: no
- storage format changes: no
- interface changes: yes

Details:
Make SQLPP parser use namespace resolver.

Change-Id: Ief85be9686ec950a158456008b2a712cc9c5c1d2
Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/17851
Integration-Tests: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Tested-by: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Tested-by: Ali Alsuliman <ali.al.solaiman@gmail.com>
Reviewed-by: Ali Alsuliman <ali.al.solaiman@gmail.com>
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;