diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataNode.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataNode.java
index e7d3a2f..9d32c61 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataNode.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataNode.java
@@ -338,7 +338,7 @@
             throws AlgebricksException {
         ExtensionMetadataDataset<T> index = getExtensionMetadataDataset(searchKey.getDatasetId());
         IMetadataEntityTupleTranslator<T> tupleTranslator = index.getTupleTranslator(false);
-        return getEntities(txnId, searchKey.getSearchKey(), tupleTranslator, index);
+        return getEntities(txnId, searchKey.getSearchKey(mdIndexesProvider), tupleTranslator, index);
     }
 
     private <T extends IExtensionMetadataEntity> ExtensionMetadataDataset<T> getExtensionMetadataDataset(
@@ -1314,14 +1314,16 @@
     }
 
     private void confirmFunctionIsUnusedByViews(TxnId txnId, FunctionSignature signature) throws AlgebricksException {
-        confirmObjectIsUnusedByViews(txnId, "function", DependencyKind.FUNCTION, null, signature.getDataverseName(),
-                signature.getName(), Integer.toString(signature.getArity()));
+        String functionDatabase = MetadataUtil.resolveDatabase(null, signature.getDataverseName());
+        confirmObjectIsUnusedByViews(txnId, "function", DependencyKind.FUNCTION, functionDatabase,
+                signature.getDataverseName(), signature.getName(), Integer.toString(signature.getArity()));
     }
 
     private void confirmFunctionIsUnusedByFunctions(TxnId txnId, FunctionSignature signature)
             throws AlgebricksException {
-        confirmObjectIsUnusedByFunctions(txnId, "function", DependencyKind.FUNCTION, null, signature.getDataverseName(),
-                signature.getName(), Integer.toString(signature.getArity()));
+        String functionDatabase = MetadataUtil.resolveDatabase(null, signature.getDataverseName());
+        confirmObjectIsUnusedByFunctions(txnId, "function", DependencyKind.FUNCTION, functionDatabase,
+                signature.getDataverseName(), signature.getName(), Integer.toString(signature.getArity()));
     }
 
     private void confirmObjectIsUnusedByFunctions(TxnId txnId, String objectKindDisplayName,
@@ -1678,8 +1680,10 @@
 
     @Override
     public Function getFunction(TxnId txnId, FunctionSignature functionSignature) throws AlgebricksException {
-        List<Function> functions = getFunctionsImpl(txnId, createTuple(null, functionSignature.getDataverseName(),
-                functionSignature.getName(), Integer.toString(functionSignature.getArity())));
+        String functionDatabase = MetadataUtil.resolveDatabase(null, functionSignature.getDataverseName());
+        List<Function> functions =
+                getFunctionsImpl(txnId, createTuple(functionDatabase, functionSignature.getDataverseName(),
+                        functionSignature.getName(), Integer.toString(functionSignature.getArity())));
         return functions.isEmpty() ? null : functions.get(0);
     }
 
@@ -1714,7 +1718,8 @@
         }
         try {
             // Delete entry from the 'function' dataset.
-            ITupleReference searchKey = createTuple(null, functionSignature.getDataverseName(),
+            String functionDatabase = MetadataUtil.resolveDatabase(null, functionSignature.getDataverseName());
+            ITupleReference searchKey = createTuple(functionDatabase, functionSignature.getDataverseName(),
                     functionSignature.getName(), Integer.toString(functionSignature.getArity()));
             // Searches the index for the tuple to be deleted. Acquires an S lock on the 'function' dataset.
             ITupleReference functionTuple =
@@ -1940,7 +1945,7 @@
         }
     }
 
-    private static ITupleReference createDatabaseTuple(String databaseName, DataverseName dataverseName,
+    public static ITupleReference createDatabaseTuple(String databaseName, DataverseName dataverseName,
             String... rest) {
         try {
             ArrayTupleBuilder tupleBuilder = new ArrayTupleBuilder(2 + rest.length);
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/IExtensionMetadataSearchKey.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/IExtensionMetadataSearchKey.java
index e8e39e3..ab554ea 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/IExtensionMetadataSearchKey.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/IExtensionMetadataSearchKey.java
@@ -20,6 +20,7 @@
 
 import java.io.Serializable;
 
+import org.apache.asterix.metadata.bootstrap.MetadataIndexesProvider;
 import org.apache.hyracks.dataflow.common.data.accessors.ITupleReference;
 
 /**
@@ -39,5 +40,5 @@
      *
      * @return the search key as a tuple reference
      */
-    ITupleReference getSearchKey();
+    ITupleReference getSearchKey(MetadataIndexesProvider mdIndexesProvider);
 }
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/CompactionPolicyEntity.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/CompactionPolicyEntity.java
index b0d335e..58d1c5a 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/CompactionPolicyEntity.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/CompactionPolicyEntity.java
@@ -64,8 +64,8 @@
         this.classNameIndex = startIndex++;
     }
 
-    public static CompactionPolicyEntity of(boolean cloudDeployment) {
-        return COMPACTION_POLICY;
+    public static CompactionPolicyEntity of(boolean usingDatabase) {
+        return usingDatabase ? DB_COMPACTION_POLICY : COMPACTION_POLICY;
     }
 
     public MetadataIndex getIndex() {
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/DatasetEntity.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/DatasetEntity.java
index 0dd4cde..546f66c 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/DatasetEntity.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/DatasetEntity.java
@@ -105,8 +105,8 @@
         this.pendingOpIndex = startIndex++;
     }
 
-    public static DatasetEntity of(boolean cloudDeployment) {
-        return DATASET;
+    public static DatasetEntity of(boolean usingDatabase) {
+        return usingDatabase ? DB_DATASET : DATASET;
     }
 
     public MetadataIndex getIndex() {
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/DatasourceAdapterEntity.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/DatasourceAdapterEntity.java
index 25791a0..aa3024c 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/DatasourceAdapterEntity.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/DatasourceAdapterEntity.java
@@ -71,8 +71,8 @@
         this.timestampIndex = startIndex++;
     }
 
-    public static DatasourceAdapterEntity of(boolean cloudDeployment) {
-        return DATASOURCE_ADAPTER;
+    public static DatasourceAdapterEntity of(boolean usingDatabase) {
+        return usingDatabase ? DB_DATASOURCE_ADAPTER : DATASOURCE_ADAPTER;
     }
 
     public MetadataIndex getIndex() {
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/DatatypeEntity.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/DatatypeEntity.java
index 605eef6..bb85db6 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/DatatypeEntity.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/DatatypeEntity.java
@@ -70,8 +70,8 @@
         this.timestampIndex = startIndex++;
     }
 
-    public static DatatypeEntity of(boolean cloudDeployment) {
-        return DATATYPE;
+    public static DatatypeEntity of(boolean usingDatabase) {
+        return usingDatabase ? DB_DATATYPE : DATATYPE;
     }
 
     public MetadataIndex getIndex() {
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/DataverseEntity.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/DataverseEntity.java
index ca658d2..b6c6364 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/DataverseEntity.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/DataverseEntity.java
@@ -65,8 +65,8 @@
         this.pendingOpIndex = startIndex++;
     }
 
-    public static DataverseEntity of(boolean cloudDeployment) {
-        return DATAVERSE;
+    public static DataverseEntity of(boolean usingDatabase) {
+        return usingDatabase ? DB_DATAVERSE : DATAVERSE;
     }
 
     public MetadataIndex getIndex() {
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/ExternalFileEntity.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/ExternalFileEntity.java
index 47ae4d1..c93c4d7 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/ExternalFileEntity.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/ExternalFileEntity.java
@@ -78,8 +78,8 @@
         this.pendingOpIndex = startIndex++;
     }
 
-    public static ExternalFileEntity of(boolean cloudDeployment) {
-        return EXTERNAL_FILE;
+    public static ExternalFileEntity of(boolean usingDatabase) {
+        return usingDatabase ? DB_EXTERNAL_FILE : EXTERNAL_FILE;
     }
 
     public MetadataIndex getIndex() {
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/FeedConnectionEntity.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/FeedConnectionEntity.java
index 710afca..f675869 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/FeedConnectionEntity.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/FeedConnectionEntity.java
@@ -76,8 +76,8 @@
         this.policyIndex = startIndex++;
     }
 
-    public static FeedConnectionEntity of(boolean cloudDeployment) {
-        return FEED_CONNECTION;
+    public static FeedConnectionEntity of(boolean usingDatabase) {
+        return usingDatabase ? DB_FEED_CONNECTION : FEED_CONNECTION;
     }
 
     public MetadataIndex getIndex() {
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/FeedEntity.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/FeedEntity.java
index d82c298..c690bb3 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/FeedEntity.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/FeedEntity.java
@@ -71,8 +71,8 @@
         this.timestampIndex = startIndex++;
     }
 
-    public static FeedEntity of(boolean cloudDeployment) {
-        return FEED;
+    public static FeedEntity of(boolean usingDatabase) {
+        return usingDatabase ? DB_FEED : FEED;
     }
 
     public MetadataIndex getIndex() {
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/FeedPolicyEntity.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/FeedPolicyEntity.java
index c22977c..c9ddb93 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/FeedPolicyEntity.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/FeedPolicyEntity.java
@@ -70,8 +70,8 @@
         this.propertiesIndex = startIndex++;
     }
 
-    public static FeedPolicyEntity of(boolean cloudDeployment) {
-        return FEED_POLICY;
+    public static FeedPolicyEntity of(boolean usingDatabase) {
+        return usingDatabase ? DB_FEED_POLICY : FEED_POLICY;
     }
 
     public MetadataIndex getIndex() {
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/FullTextConfigEntity.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/FullTextConfigEntity.java
index 6d4e331..ac1a2eb 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/FullTextConfigEntity.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/FullTextConfigEntity.java
@@ -69,8 +69,8 @@
         this.filterPipelineIndex = startIndex++;;
     }
 
-    public static FullTextConfigEntity of(boolean cloudDeployment) {
-        return FULL_TEXT_CONFIG;
+    public static FullTextConfigEntity of(boolean usingDatabase) {
+        return usingDatabase ? DB_FULL_TEXT_CONFIG : FULL_TEXT_CONFIG;
     }
 
     public MetadataIndex getIndex() {
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/FullTextFilterEntity.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/FullTextFilterEntity.java
index 49b3334..7942da6 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/FullTextFilterEntity.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/FullTextFilterEntity.java
@@ -64,8 +64,8 @@
         this.filterTypeIndex = startIndex++;
     }
 
-    public static FullTextFilterEntity of(boolean cloudDeployment) {
-        return FULL_TEXT_CONFIG;
+    public static FullTextFilterEntity of(boolean usingDatabase) {
+        return usingDatabase ? DB_FULL_TEXT_CONFIG : FULL_TEXT_CONFIG;
     }
 
     public MetadataIndex getIndex() {
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/FunctionEntity.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/FunctionEntity.java
index a665f35..45387d5 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/FunctionEntity.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/FunctionEntity.java
@@ -81,8 +81,8 @@
         this.functionDependenciesIndex = startIndex++;
     }
 
-    public static FunctionEntity of(boolean cloudDeployment) {
-        return FUNCTION;
+    public static FunctionEntity of(boolean usingDatabase) {
+        return usingDatabase ? DB_FUNCTION : FUNCTION;
     }
 
     public MetadataIndex getIndex() {
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/IndexEntity.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/IndexEntity.java
index fd23dd0..bd2c4c0 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/IndexEntity.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/IndexEntity.java
@@ -82,8 +82,8 @@
         this.pendingOpIndex = startIndex++;
     }
 
-    public static IndexEntity of(boolean cloudDeployment) {
-        return INDEX;
+    public static IndexEntity of(boolean usingDatabase) {
+        return usingDatabase ? DB_INDEX : INDEX;
     }
 
     public MetadataIndex getIndex() {
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/LibraryEntity.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/LibraryEntity.java
index 692d35e..98b8a63 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/LibraryEntity.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/LibraryEntity.java
@@ -66,8 +66,8 @@
         this.timestampIndex = startIndex++;
     }
 
-    public static LibraryEntity of(boolean cloudDeployment) {
-        return LIBRARY;
+    public static LibraryEntity of(boolean usingDatabase) {
+        return usingDatabase ? DB_LIBRARY : LIBRARY;
     }
 
     public MetadataIndex getIndex() {
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 8c19505..7dadde3 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
@@ -25,82 +25,82 @@
 
 public class MetadataIndexesProvider {
 
-    protected final boolean cloudDeployment;
+    protected final boolean usingDatabase;
 
     public MetadataIndexesProvider(INCServiceContext ncServiceCtx) {
-        cloudDeployment = ncServiceCtx.getAppConfig().getBoolean(CLOUD_DEPLOYMENT);
+        usingDatabase = ncServiceCtx.getAppConfig().getBoolean(CLOUD_DEPLOYMENT);
     }
 
     public DatabaseEntity getDatabaseEntity() {
-        return DatabaseEntity.of(cloudDeployment);
+        return DatabaseEntity.of(usingDatabase);
     }
 
     public DataverseEntity getDataverseEntity() {
-        return DataverseEntity.of(cloudDeployment);
+        return DataverseEntity.of(usingDatabase);
     }
 
     public DatasetEntity getDatasetEntity() {
-        return DatasetEntity.of(cloudDeployment);
+        return DatasetEntity.of(usingDatabase);
     }
 
     public DatatypeEntity getDatatypeEntity() {
-        return DatatypeEntity.of(cloudDeployment);
+        return DatatypeEntity.of(usingDatabase);
     }
 
     public IndexEntity getIndexEntity() {
-        return IndexEntity.of(cloudDeployment);
+        return IndexEntity.of(usingDatabase);
     }
 
     public SynonymEntity getSynonymEntity() {
-        return SynonymEntity.of(cloudDeployment);
+        return SynonymEntity.of(usingDatabase);
     }
 
     public NodeEntity getNodeEntity() {
-        return NodeEntity.of(cloudDeployment);
+        return NodeEntity.of(usingDatabase);
     }
 
     public NodeGroupEntity getNodeGroupEntity() {
-        return NodeGroupEntity.of(cloudDeployment);
+        return NodeGroupEntity.of(usingDatabase);
     }
 
     public FunctionEntity getFunctionEntity() {
-        return FunctionEntity.of(cloudDeployment);
+        return FunctionEntity.of(usingDatabase);
     }
 
     public DatasourceAdapterEntity getDatasourceAdapterEntity() {
-        return DatasourceAdapterEntity.of(cloudDeployment);
+        return DatasourceAdapterEntity.of(usingDatabase);
     }
 
     public FeedEntity getFeedEntity() {
-        return FeedEntity.of(cloudDeployment);
+        return FeedEntity.of(usingDatabase);
     }
 
     public FeedPolicyEntity getFeedPolicyEntity() {
-        return FeedPolicyEntity.of(cloudDeployment);
+        return FeedPolicyEntity.of(usingDatabase);
     }
 
     public LibraryEntity getLibraryEntity() {
-        return LibraryEntity.of(cloudDeployment);
+        return LibraryEntity.of(usingDatabase);
     }
 
     public CompactionPolicyEntity getCompactionPolicyEntity() {
-        return CompactionPolicyEntity.of(cloudDeployment);
+        return CompactionPolicyEntity.of(usingDatabase);
     }
 
     public ExternalFileEntity getExternalFileEntity() {
-        return ExternalFileEntity.of(cloudDeployment);
+        return ExternalFileEntity.of(usingDatabase);
     }
 
     public FeedConnectionEntity getFeedConnectionEntity() {
-        return FeedConnectionEntity.of(cloudDeployment);
+        return FeedConnectionEntity.of(usingDatabase);
     }
 
     public FullTextConfigEntity getFullTextConfigEntity() {
-        return FullTextConfigEntity.of(cloudDeployment);
+        return FullTextConfigEntity.of(usingDatabase);
     }
 
     public FullTextFilterEntity getFullTextFilterEntity() {
-        return FullTextFilterEntity.of(cloudDeployment);
+        return FullTextFilterEntity.of(usingDatabase);
     }
 
     public IMetadataIndex[] getMetadataIndexes() {
@@ -126,6 +126,6 @@
     }
 
     public boolean isUsingDatabase() {
-        return false;
+        return usingDatabase;
     }
 }
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/SynonymEntity.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/SynonymEntity.java
index ba44f44..34ecc59 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/SynonymEntity.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/SynonymEntity.java
@@ -68,8 +68,8 @@
         this.objectNameIndex = startIndex++;;
     }
 
-    public static SynonymEntity of(boolean cloudDeployment) {
-        return SYNONYM;
+    public static SynonymEntity of(boolean usingDatabase) {
+        return usingDatabase ? DB_SYNONYM : SYNONYM;
     }
 
     public MetadataIndex getIndex() {
