This is an automated email from the ASF dual-hosted git repository.

alsuliman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/asterixdb.git


The following commit(s) were added to refs/heads/master by this push:
     new 0cda5eaa29 [ASTERIXDB-3259][MTD] Add database-aware entity types
0cda5eaa29 is described below

commit 0cda5eaa29f63f7f7eea969ece60f772b28594ac
Author: Ali Alsuliman <[email protected]>
AuthorDate: Mon Sep 11 21:02:17 2023 -0700

    [ASTERIXDB-3259][MTD] Add database-aware entity types
    
    - user model changes: no
    - storage format changes: no
    - interface changes: no
    
    Details:
    Add database-aware entity types that should be used
    for cloud deployment.
    Change-Id: I6508b9c9a34f8c35d94d4a1bf866c6f0e236a11f
    Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/17775
    Integration-Tests: Jenkins <[email protected]>
    Tested-by: Ali Alsuliman <[email protected]>
    Reviewed-by: Ali Alsuliman <[email protected]>
    Reviewed-by: Wail Alkowaileet <[email protected]>
---
 .../metadata/MetadataIndexImmutableProperties.java |  2 +-
 .../metadata/bootstrap/CompactionPolicyEntity.java | 21 +++++++++
 .../{DataverseEntity.java => DatabaseEntity.java}  | 54 +++++++++++-----------
 .../asterix/metadata/bootstrap/DatasetEntity.java  | 31 +++++++++++++
 .../bootstrap/DatasourceAdapterEntity.java         | 23 +++++++++
 .../asterix/metadata/bootstrap/DatatypeEntity.java | 23 +++++++++
 .../metadata/bootstrap/DataverseEntity.java        | 21 +++++++++
 .../metadata/bootstrap/ExternalFileEntity.java     | 23 +++++++++
 .../metadata/bootstrap/FeedConnectionEntity.java   | 23 +++++++++
 .../asterix/metadata/bootstrap/FeedEntity.java     | 24 ++++++++++
 .../metadata/bootstrap/FeedPolicyEntity.java       | 23 +++++++++
 .../metadata/bootstrap/FullTextConfigEntity.java   | 20 ++++++++
 .../metadata/bootstrap/FullTextFilterEntity.java   | 16 +++++++
 .../asterix/metadata/bootstrap/FunctionEntity.java | 25 ++++++++++
 .../asterix/metadata/bootstrap/IndexEntity.java    | 24 ++++++++++
 .../asterix/metadata/bootstrap/LibraryEntity.java  | 23 +++++++++
 .../metadata/bootstrap/MetadataPrimaryIndexes.java |  2 +
 .../metadata/bootstrap/MetadataRecordTypes.java    |  6 +++
 .../asterix/metadata/bootstrap/SynonymEntity.java  | 23 +++++++++
 .../asterix/metadata/utils/MetadataConstants.java  |  1 +
 20 files changed, 381 insertions(+), 27 deletions(-)

diff --git 
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/metadata/MetadataIndexImmutableProperties.java
 
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/metadata/MetadataIndexImmutableProperties.java
index 3426d74bd4..006632a169 100644
--- 
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/metadata/MetadataIndexImmutableProperties.java
+++ 
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/metadata/MetadataIndexImmutableProperties.java
@@ -23,7 +23,7 @@ public class MetadataIndexImmutableProperties {
     public static final int FIRST_AVAILABLE_EXTENSION_METADATA_DATASET_ID = 52;
     public static final int FIRST_AVAILABLE_USER_DATASET_ID = 100;
     public static final int METADATA_DATASETS_PARTITIONS = 1;
-    public static final int METADATA_DATASETS_COUNT = 17;
+    public static final int METADATA_DATASETS_COUNT = 18;
 
     private final String indexName;
     private final int datasetId;
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 4cfbdff83b..b0d335e847 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
@@ -22,6 +22,7 @@ package org.apache.asterix.metadata.bootstrap;
 import static 
org.apache.asterix.metadata.bootstrap.MetadataPrimaryIndexes.PROPERTIES_COMPACTION_POLICY;
 import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_CLASSNAME;
 import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_COMPACTION_POLICY;
+import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_DATABASE_NAME;
 import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_DATAVERSE_NAME;
 import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.RECORD_NAME_COMPACTION_POLICY;
 
@@ -40,6 +41,13 @@ public final class CompactionPolicyEntity {
                     Arrays.asList(List.of(FIELD_NAME_DATAVERSE_NAME), 
List.of(FIELD_NAME_COMPACTION_POLICY)), 0,
                     compactionPolicyType(), true, new int[] { 0, 1 }), 2, -1);
 
+    private static final CompactionPolicyEntity DB_COMPACTION_POLICY =
+            new CompactionPolicyEntity(new 
MetadataIndex(PROPERTIES_COMPACTION_POLICY, 4,
+                    new IAType[] { BuiltinType.ASTRING, BuiltinType.ASTRING, 
BuiltinType.ASTRING },
+                    Arrays.asList(List.of(FIELD_NAME_DATABASE_NAME), 
List.of(FIELD_NAME_DATAVERSE_NAME),
+                            List.of(FIELD_NAME_COMPACTION_POLICY)),
+                    0, databaseCompactionPolicyType(), true, new int[] { 0, 1, 
2 }), 3, 0);
+
     private final int payloadPosition;
     private final MetadataIndex index;
     private final int databaseNameIndex;
@@ -99,4 +107,17 @@ public final class CompactionPolicyEntity {
                 //IsOpen?
                 true);
     }
+
+    private static ARecordType databaseCompactionPolicyType() {
+        return MetadataRecordTypes.createRecordType(
+                // RecordTypeName
+                RECORD_NAME_COMPACTION_POLICY,
+                // FieldNames
+                new String[] { FIELD_NAME_DATABASE_NAME, 
FIELD_NAME_DATAVERSE_NAME, FIELD_NAME_COMPACTION_POLICY,
+                        FIELD_NAME_CLASSNAME },
+                // FieldTypes
+                new IAType[] { BuiltinType.ASTRING, BuiltinType.ASTRING, 
BuiltinType.ASTRING, BuiltinType.ASTRING },
+                //IsOpen?
+                true);
+    }
 }
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/DatabaseEntity.java
similarity index 64%
copy from 
asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/DataverseEntity.java
copy to 
asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/DatabaseEntity.java
index 8a6cc0330f..4982dc201c 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/DatabaseEntity.java
@@ -19,12 +19,13 @@
 
 package org.apache.asterix.metadata.bootstrap;
 
-import static 
org.apache.asterix.metadata.bootstrap.MetadataPrimaryIndexes.PROPERTIES_DATAVERSE;
-import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_DATAVERSE_NAME;
-import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_DATA_FORMAT;
+import static 
org.apache.asterix.metadata.bootstrap.MetadataPrimaryIndexes.PROPERTIES_DATABASE;
+import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_DATABASE_ID;
+import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_DATABASE_NAME;
 import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_PENDING_OP;
+import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_SYSTEM_DATABASE;
 import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_TIMESTAMP;
-import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.RECORD_NAME_DATAVERSE;
+import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.RECORD_NAME_DATABASE;
 
 import java.util.List;
 
@@ -32,34 +33,34 @@ import org.apache.asterix.om.types.ARecordType;
 import org.apache.asterix.om.types.BuiltinType;
 import org.apache.asterix.om.types.IAType;
 
-public final class DataverseEntity {
+public final class DatabaseEntity {
 
-    private static final DataverseEntity DATAVERSE =
-            new DataverseEntity(
-                    new MetadataIndex(PROPERTIES_DATAVERSE, 2, new IAType[] { 
BuiltinType.ASTRING },
-                            List.of(List.of(FIELD_NAME_DATAVERSE_NAME)), 0, 
dataverseType(), true, new int[] { 0 }),
-                    1, -1);
+    private static final DatabaseEntity DATABASE =
+            new DatabaseEntity(
+                    new MetadataIndex(PROPERTIES_DATABASE, 2, new IAType[] { 
BuiltinType.ASTRING },
+                            List.of(List.of(FIELD_NAME_DATABASE_NAME)), 0, 
databaseType(), true, new int[] { 0 }),
+                    1, 0);
 
     private final int payloadPosition;
     private final MetadataIndex index;
     private final int databaseNameIndex;
-    private final int dataverseNameIndex;
-    private final int dataFormatIndex;
+    private final int databaseIdIndex;
+    private final int systemDatabaseIndex;
     private final int timestampIndex;
     private final int pendingOpIndex;
 
-    private DataverseEntity(MetadataIndex index, int payloadPosition, int 
startIndex) {
+    private DatabaseEntity(MetadataIndex index, int payloadPosition, int 
startIndex) {
         this.index = index;
         this.payloadPosition = payloadPosition;
         this.databaseNameIndex = startIndex++;
-        this.dataverseNameIndex = startIndex++;
-        this.dataFormatIndex = startIndex++;
+        this.databaseIdIndex = startIndex++;
+        this.systemDatabaseIndex = startIndex++;
         this.timestampIndex = startIndex++;
         this.pendingOpIndex = startIndex++;
     }
 
-    public static DataverseEntity of(boolean cloudDeployment) {
-        return DATAVERSE;
+    public static DatabaseEntity of(boolean cloudDeployment) {
+        return DATABASE;
     }
 
     public MetadataIndex getIndex() {
@@ -78,12 +79,12 @@ public final class DataverseEntity {
         return databaseNameIndex;
     }
 
-    public int dataverseNameIndex() {
-        return dataverseNameIndex;
+    public int databaseIdIndex() {
+        return databaseIdIndex;
     }
 
-    public int dataFormatIndex() {
-        return dataFormatIndex;
+    public int systemDatabaseIndex() {
+        return systemDatabaseIndex;
     }
 
     public int timestampIndex() {
@@ -94,15 +95,16 @@ public final class DataverseEntity {
         return pendingOpIndex;
     }
 
-    private static ARecordType dataverseType() {
+    private static ARecordType databaseType() {
         return MetadataRecordTypes.createRecordType(
                 // RecordTypeName
-                RECORD_NAME_DATAVERSE,
+                RECORD_NAME_DATABASE,
                 // FieldNames
-                new String[] { FIELD_NAME_DATAVERSE_NAME, 
FIELD_NAME_DATA_FORMAT, FIELD_NAME_TIMESTAMP,
-                        FIELD_NAME_PENDING_OP },
+                new String[] { FIELD_NAME_DATABASE_NAME, 
FIELD_NAME_DATABASE_ID, FIELD_NAME_SYSTEM_DATABASE,
+                        FIELD_NAME_TIMESTAMP, FIELD_NAME_PENDING_OP },
                 // FieldTypes
-                new IAType[] { BuiltinType.ASTRING, BuiltinType.ASTRING, 
BuiltinType.ASTRING, BuiltinType.AINT32 },
+                new IAType[] { BuiltinType.ASTRING, BuiltinType.AINT32, 
BuiltinType.ABOOLEAN, BuiltinType.ASTRING,
+                        BuiltinType.AINT32 },
                 //IsOpen?
                 true);
     }
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 c7928a6a35..0dd4cdef8a 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
@@ -25,6 +25,7 @@ import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.DATASET_
 import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.EXTERNAL_DETAILS_RECORDTYPE;
 import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_COMPACTION_POLICY;
 import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_COMPACTION_POLICY_PROPERTIES;
+import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_DATABASE_NAME;
 import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_DATASET_ID;
 import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_DATASET_NAME;
 import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_DATASET_TYPE;
@@ -58,6 +59,14 @@ public final class DatasetEntity {
                     datasetType(), true, new int[] { 0, 1 }),
             2, -1);
 
+    private static final DatasetEntity DB_DATASET = new DatasetEntity(
+            new MetadataIndex(PROPERTIES_DATASET, 4,
+                    new IAType[] { BuiltinType.ASTRING, BuiltinType.ASTRING, 
BuiltinType.ASTRING },
+                    Arrays.asList(List.of(FIELD_NAME_DATABASE_NAME), 
List.of(FIELD_NAME_DATAVERSE_NAME),
+                            List.of(FIELD_NAME_DATASET_NAME)),
+                    0, databaseDatasetType(), true, new int[] { 0, 1, 2 }),
+            3, 0);
+
     private final int payloadPosition;
     private final MetadataIndex index;
     private final int databaseNameIndex;
@@ -193,4 +202,26 @@ public final class DatasetEntity {
                 //IsOpen?
                 true);
     }
+
+    private static ARecordType databaseDatasetType() {
+        return MetadataRecordTypes.createRecordType(
+                // RecordTypeName
+                RECORD_NAME_DATASET,
+                // FieldNames
+                new String[] { FIELD_NAME_DATABASE_NAME, 
FIELD_NAME_DATAVERSE_NAME, FIELD_NAME_DATASET_NAME,
+                        FIELD_NAME_DATATYPE_DATAVERSE_NAME, 
FIELD_NAME_DATATYPE_NAME, FIELD_NAME_DATASET_TYPE,
+                        FIELD_NAME_GROUP_NAME, FIELD_NAME_COMPACTION_POLICY, 
FIELD_NAME_COMPACTION_POLICY_PROPERTIES,
+                        FIELD_NAME_INTERNAL_DETAILS, 
FIELD_NAME_EXTERNAL_DETAILS, FIELD_NAME_HINTS,
+                        FIELD_NAME_TIMESTAMP, FIELD_NAME_DATASET_ID, 
FIELD_NAME_PENDING_OP },
+                // FieldTypes
+                new IAType[] { BuiltinType.ASTRING, BuiltinType.ASTRING, 
BuiltinType.ASTRING, BuiltinType.ASTRING,
+                        BuiltinType.ASTRING, BuiltinType.ASTRING, 
BuiltinType.ASTRING, BuiltinType.ASTRING,
+                        new 
AOrderedListType(COMPACTION_POLICY_PROPERTIES_RECORDTYPE, null),
+                        
AUnionType.createUnknownableType(INTERNAL_DETAILS_RECORDTYPE),
+                        
AUnionType.createUnknownableType(EXTERNAL_DETAILS_RECORDTYPE),
+                        new AUnorderedListType(DATASET_HINTS_RECORDTYPE, 
null), BuiltinType.ASTRING, BuiltinType.AINT32,
+                        BuiltinType.AINT32 },
+                //IsOpen?
+                true);
+    }
 }
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 41aeee9901..25791a091d 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
@@ -21,6 +21,7 @@ package org.apache.asterix.metadata.bootstrap;
 
 import static 
org.apache.asterix.metadata.bootstrap.MetadataPrimaryIndexes.PROPERTIES_DATASOURCE_ADAPTER;
 import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_CLASSNAME;
+import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_DATABASE_NAME;
 import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_DATAVERSE_NAME;
 import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_NAME;
 import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_TIMESTAMP;
@@ -42,6 +43,14 @@ public final class DatasourceAdapterEntity {
                     Arrays.asList(List.of(FIELD_NAME_DATAVERSE_NAME), 
List.of(FIELD_NAME_NAME)), 0,
                     datasourceAdapterType(), true, new int[] { 0, 1 }), 2, -1);
 
+    private static final DatasourceAdapterEntity DB_DATASOURCE_ADAPTER = new 
DatasourceAdapterEntity(
+            new MetadataIndex(PROPERTIES_DATASOURCE_ADAPTER, 4,
+                    new IAType[] { BuiltinType.ASTRING, BuiltinType.ASTRING, 
BuiltinType.ASTRING },
+                    Arrays.asList(List.of(FIELD_NAME_DATABASE_NAME), 
List.of(FIELD_NAME_DATAVERSE_NAME),
+                            List.of(FIELD_NAME_NAME)),
+                    0, databaseDatasourceAdapterType(), true, new int[] { 0, 
1, 2 }),
+            3, 0);
+
     private final int payloadPosition;
     private final MetadataIndex index;
     private final int databaseNameIndex;
@@ -115,4 +124,18 @@ public final class DatasourceAdapterEntity {
                 //IsOpen?
                 true);
     }
+
+    private static ARecordType databaseDatasourceAdapterType() {
+        return MetadataRecordTypes.createRecordType(
+                // RecordTypeName
+                RECORD_NAME_DATASOURCE_ADAPTER,
+                // FieldNames
+                new String[] { FIELD_NAME_DATABASE_NAME, 
FIELD_NAME_DATAVERSE_NAME, FIELD_NAME_NAME,
+                        FIELD_NAME_CLASSNAME, FIELD_NAME_TYPE, 
FIELD_NAME_TIMESTAMP },
+                // FieldTypes
+                new IAType[] { BuiltinType.ASTRING, BuiltinType.ASTRING, 
BuiltinType.ASTRING, BuiltinType.ASTRING,
+                        BuiltinType.ASTRING, BuiltinType.ASTRING },
+                //IsOpen?
+                true);
+    }
 }
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 a26f2320f5..605eef625b 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
@@ -21,6 +21,7 @@ package org.apache.asterix.metadata.bootstrap;
 
 import static 
org.apache.asterix.metadata.bootstrap.MetadataPrimaryIndexes.PROPERTIES_DATATYPE;
 import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.DERIVEDTYPE_RECORDTYPE;
+import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_DATABASE_NAME;
 import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_DATATYPE_NAME;
 import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_DATAVERSE_NAME;
 import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_DERIVED;
@@ -43,6 +44,14 @@ public final class DatatypeEntity {
                     datatypeType(), true, new int[] { 0, 1 }),
             2, -1);
 
+    private static final DatatypeEntity DB_DATATYPE = new DatatypeEntity(
+            new MetadataIndex(PROPERTIES_DATATYPE, 4,
+                    new IAType[] { BuiltinType.ASTRING, BuiltinType.ASTRING, 
BuiltinType.ASTRING },
+                    Arrays.asList(List.of(FIELD_NAME_DATABASE_NAME), 
List.of(FIELD_NAME_DATAVERSE_NAME),
+                            List.of(FIELD_NAME_DATATYPE_NAME)),
+                    0, databaseDatatypeType(), true, new int[] { 0, 1, 2 }),
+            3, 0);
+
     private final int payloadPosition;
     private final MetadataIndex index;
     private final int databaseNameIndex;
@@ -110,4 +119,18 @@ public final class DatatypeEntity {
                 //IsOpen?
                 true);
     }
+
+    private static ARecordType databaseDatatypeType() {
+        return MetadataRecordTypes.createRecordType(
+                // RecordTypeName
+                RECORD_NAME_DATATYPE,
+                // FieldNames
+                new String[] { FIELD_NAME_DATABASE_NAME, 
FIELD_NAME_DATAVERSE_NAME, FIELD_NAME_DATATYPE_NAME,
+                        FIELD_NAME_DERIVED, FIELD_NAME_TIMESTAMP },
+                // FieldTypes
+                new IAType[] { BuiltinType.ASTRING, BuiltinType.ASTRING, 
BuiltinType.ASTRING,
+                        
AUnionType.createUnknownableType(DERIVEDTYPE_RECORDTYPE), BuiltinType.ASTRING },
+                //IsOpen?
+                true);
+    }
 }
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 8a6cc0330f..ca658d2a21 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
@@ -20,6 +20,7 @@
 package org.apache.asterix.metadata.bootstrap;
 
 import static 
org.apache.asterix.metadata.bootstrap.MetadataPrimaryIndexes.PROPERTIES_DATAVERSE;
+import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_DATABASE_NAME;
 import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_DATAVERSE_NAME;
 import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_DATA_FORMAT;
 import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_PENDING_OP;
@@ -40,6 +41,12 @@ public final class DataverseEntity {
                             List.of(List.of(FIELD_NAME_DATAVERSE_NAME)), 0, 
dataverseType(), true, new int[] { 0 }),
                     1, -1);
 
+    private static final DataverseEntity DB_DATAVERSE = new DataverseEntity(
+            new MetadataIndex(PROPERTIES_DATAVERSE, 3, new IAType[] { 
BuiltinType.ASTRING, BuiltinType.ASTRING },
+                    List.of(List.of(FIELD_NAME_DATABASE_NAME), 
List.of(FIELD_NAME_DATAVERSE_NAME)), 0,
+                    databaseDataverseType(), true, new int[] { 0, 1 }),
+            2, 0);
+
     private final int payloadPosition;
     private final MetadataIndex index;
     private final int databaseNameIndex;
@@ -106,4 +113,18 @@ public final class DataverseEntity {
                 //IsOpen?
                 true);
     }
+
+    private static ARecordType databaseDataverseType() {
+        return MetadataRecordTypes.createRecordType(
+                // RecordTypeName
+                RECORD_NAME_DATAVERSE,
+                // FieldNames
+                new String[] { FIELD_NAME_DATABASE_NAME, 
FIELD_NAME_DATAVERSE_NAME, FIELD_NAME_DATA_FORMAT,
+                        FIELD_NAME_TIMESTAMP, FIELD_NAME_PENDING_OP },
+                // FieldTypes
+                new IAType[] { BuiltinType.ASTRING, BuiltinType.ASTRING, 
BuiltinType.ASTRING, BuiltinType.ASTRING,
+                        BuiltinType.AINT32 },
+                //IsOpen?
+                true);
+    }
 }
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 2827fd73ba..47ae4d1575 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
@@ -20,6 +20,7 @@
 package org.apache.asterix.metadata.bootstrap;
 
 import static 
org.apache.asterix.metadata.bootstrap.MetadataPrimaryIndexes.PROPERTIES_EXTERNAL_FILE;
+import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_DATABASE_NAME;
 import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_DATASET_NAME;
 import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_DATAVERSE_NAME;
 import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_FILE_MOD_TIME;
@@ -46,6 +47,13 @@ public final class ExternalFileEntity {
                     0, externalFileType(), true, new int[] { 0, 1, 2 }),
             3, -1);
 
+    private static final ExternalFileEntity DB_EXTERNAL_FILE =
+            new ExternalFileEntity(new MetadataIndex(PROPERTIES_EXTERNAL_FILE, 
5,
+                    new IAType[] { BuiltinType.ASTRING, BuiltinType.ASTRING, 
BuiltinType.ASTRING, BuiltinType.AINT32 },
+                    Arrays.asList(List.of(FIELD_NAME_DATABASE_NAME), 
List.of(FIELD_NAME_DATAVERSE_NAME),
+                            List.of(FIELD_NAME_DATASET_NAME), 
List.of(FIELD_NAME_FILE_NUMBER)),
+                    0, databaseExternalFileType(), true, new int[] { 0, 1, 2, 
3 }), 4, 0);
+
     private final int payloadPosition;
     private final MetadataIndex index;
     private final int databaseNameIndex;
@@ -131,4 +139,19 @@ public final class ExternalFileEntity {
                 //IsOpen?
                 true);
     }
+
+    private static ARecordType databaseExternalFileType() {
+        return MetadataRecordTypes.createRecordType(
+                // RecordTypeName
+                RECORD_NAME_EXTERNAL_FILE,
+                // FieldNames
+                new String[] { FIELD_NAME_DATABASE_NAME, 
FIELD_NAME_DATAVERSE_NAME, FIELD_NAME_DATASET_NAME,
+                        FIELD_NAME_FILE_NUMBER, FIELD_NAME_FILE_NAME, 
FIELD_NAME_FILE_SIZE, FIELD_NAME_FILE_MOD_TIME,
+                        FIELD_NAME_PENDING_OP },
+                // FieldTypes
+                new IAType[] { BuiltinType.ASTRING, BuiltinType.ASTRING, 
BuiltinType.ASTRING, BuiltinType.AINT32,
+                        BuiltinType.ASTRING, BuiltinType.AINT64, 
BuiltinType.ADATETIME, BuiltinType.AINT32 },
+                //IsOpen?
+                true);
+    }
 }
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 4e4c0d7453..710afca128 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
@@ -21,6 +21,7 @@ package org.apache.asterix.metadata.bootstrap;
 
 import static 
org.apache.asterix.metadata.bootstrap.MetadataPrimaryIndexes.PROPERTIES_FEED_CONNECTION;
 import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_APPLIED_FUNCTIONS;
+import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_DATABASE_NAME;
 import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_DATASET_NAME;
 import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_DATAVERSE_NAME;
 import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_FEED_NAME;
@@ -46,6 +47,13 @@ public final class FeedConnectionEntity {
                     0, feedConnectionType(), true, new int[] { 0, 1, 2 }),
             3, -1);
 
+    private static final FeedConnectionEntity DB_FEED_CONNECTION =
+            new FeedConnectionEntity(new 
MetadataIndex(PROPERTIES_FEED_CONNECTION, 5,
+                    new IAType[] { BuiltinType.ASTRING, BuiltinType.ASTRING, 
BuiltinType.ASTRING, BuiltinType.ASTRING },
+                    Arrays.asList(List.of(FIELD_NAME_DATABASE_NAME), 
List.of(FIELD_NAME_DATAVERSE_NAME),
+                            List.of(FIELD_NAME_FEED_NAME), 
List.of(FIELD_NAME_DATASET_NAME)),
+                    0, databaseFeedConnectionType(), true, new int[] { 0, 1, 
2, 3 }), 4, 0);
+
     private final int payloadPosition;
     private final MetadataIndex index;
     private final int databaseNameIndex;
@@ -125,4 +133,19 @@ public final class FeedConnectionEntity {
                 //IsOpen?
                 true);
     }
+
+    private static ARecordType databaseFeedConnectionType() {
+        return MetadataRecordTypes.createRecordType(
+                // RecordTypeName
+                RECORD_NAME_FEED_CONNECTION,
+                // FieldNames
+                new String[] { FIELD_NAME_DATABASE_NAME, 
FIELD_NAME_DATAVERSE_NAME, FIELD_NAME_FEED_NAME,
+                        FIELD_NAME_DATASET_NAME, FIELD_NAME_RETURN_TYPE, 
FIELD_NAME_APPLIED_FUNCTIONS,
+                        FIELD_NAME_POLICY_NAME },
+                // FieldTypes
+                new IAType[] { BuiltinType.ASTRING, BuiltinType.ASTRING, 
BuiltinType.ASTRING, BuiltinType.ASTRING,
+                        BuiltinType.ASTRING, new 
AUnorderedListType(BuiltinType.ASTRING, null), BuiltinType.ASTRING },
+                //IsOpen?
+                true);
+    }
 }
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 1270fb1d44..d82c2987d9 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
@@ -22,6 +22,7 @@ package org.apache.asterix.metadata.bootstrap;
 import static 
org.apache.asterix.metadata.bootstrap.MetadataPrimaryIndexes.PROPERTIES_FEED;
 import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FEED_ADAPTER_CONFIGURATION_RECORDTYPE;
 import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_ADAPTER_CONFIGURATION;
+import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_DATABASE_NAME;
 import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_DATAVERSE_NAME;
 import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_FEED_NAME;
 import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_TIMESTAMP;
@@ -43,6 +44,15 @@ public final class FeedEntity {
                     true, new int[] { 0, 1 }),
             2, -1);
 
+    private static final FeedEntity DB_FEED =
+            new FeedEntity(
+                    new MetadataIndex(PROPERTIES_FEED, 4,
+                            new IAType[] { BuiltinType.ASTRING, 
BuiltinType.ASTRING, BuiltinType.ASTRING },
+                            Arrays.asList(List.of(FIELD_NAME_DATABASE_NAME), 
List.of(FIELD_NAME_DATAVERSE_NAME),
+                                    List.of(FIELD_NAME_FEED_NAME)),
+                            0, databaseFeedType(), true, new int[] { 0, 1, 2 
}),
+                    3, 0);
+
     private final int payloadPosition;
     private final MetadataIndex index;
     private final int databaseNameIndex;
@@ -110,4 +120,18 @@ public final class FeedEntity {
                 //IsOpen?
                 true);
     }
+
+    private static ARecordType databaseFeedType() {
+        return MetadataRecordTypes.createRecordType(
+                // RecordTypeName
+                RECORD_NAME_FEED,
+                // FieldNames
+                new String[] { FIELD_NAME_DATABASE_NAME, 
FIELD_NAME_DATAVERSE_NAME, FIELD_NAME_FEED_NAME,
+                        FIELD_NAME_ADAPTER_CONFIGURATION, FIELD_NAME_TIMESTAMP 
},
+                // FieldTypes
+                new IAType[] { BuiltinType.ASTRING, BuiltinType.ASTRING, 
BuiltinType.ASTRING,
+                        new 
AUnorderedListType(FEED_ADAPTER_CONFIGURATION_RECORDTYPE, null), 
BuiltinType.ASTRING },
+                //IsOpen?
+                true);
+    }
 }
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 2d952e6ef2..c22977cef4 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
@@ -20,6 +20,7 @@
 package org.apache.asterix.metadata.bootstrap;
 
 import static 
org.apache.asterix.metadata.bootstrap.MetadataPrimaryIndexes.PROPERTIES_FEED_POLICY;
+import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_DATABASE_NAME;
 import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_DATAVERSE_NAME;
 import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_DESCRIPTION;
 import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_POLICY_NAME;
@@ -43,6 +44,14 @@ public final class FeedPolicyEntity {
                     feedPolicyType(), true, new int[] { 0, 1 }),
             2, -1);
 
+    private static final FeedPolicyEntity DB_FEED_POLICY = new 
FeedPolicyEntity(
+            new MetadataIndex(PROPERTIES_FEED_POLICY, 4,
+                    new IAType[] { BuiltinType.ASTRING, BuiltinType.ASTRING, 
BuiltinType.ASTRING },
+                    Arrays.asList(List.of(FIELD_NAME_DATABASE_NAME), 
List.of(FIELD_NAME_DATAVERSE_NAME),
+                            List.of(FIELD_NAME_POLICY_NAME)),
+                    0, databaseFeedPolicyType(), true, new int[] { 0, 1, 2 }),
+            3, 0);
+
     private final int payloadPosition;
     private final MetadataIndex index;
     private final int databaseNameIndex;
@@ -110,4 +119,18 @@ public final class FeedPolicyEntity {
                 //IsOpen?
                 true);
     }
+
+    private static ARecordType databaseFeedPolicyType() {
+        return MetadataRecordTypes.createRecordType(
+                // RecordTypeName
+                RECORD_NAME_FEED_POLICY,
+                // FieldNames
+                new String[] { FIELD_NAME_DATABASE_NAME, 
FIELD_NAME_DATAVERSE_NAME, FIELD_NAME_POLICY_NAME,
+                        FIELD_NAME_DESCRIPTION, FIELD_NAME_PROPERTIES },
+                // FieldTypes
+                new IAType[] { BuiltinType.ASTRING, BuiltinType.ASTRING, 
BuiltinType.ASTRING, BuiltinType.ASTRING,
+                        new AUnorderedListType(POLICY_PARAMS_RECORDTYPE, null) 
},
+                //IsOpen?
+                true);
+    }
 }
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 1c97822e26..6d4e3310fd 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
@@ -20,6 +20,7 @@
 package org.apache.asterix.metadata.bootstrap;
 
 import static 
org.apache.asterix.metadata.bootstrap.MetadataPrimaryIndexes.PROPERTIES_FULL_TEXT_CONFIG;
+import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_DATABASE_NAME;
 import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_DATAVERSE_NAME;
 import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_FULL_TEXT_CONFIG_NAME;
 import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_FULL_TEXT_FILTER_PIPELINE;
@@ -43,6 +44,13 @@ public final class FullTextConfigEntity {
                     fullTextConfigType(), true, new int[] { 0, 1 }),
             2, -1);
 
+    private static final FullTextConfigEntity DB_FULL_TEXT_CONFIG =
+            new FullTextConfigEntity(new 
MetadataIndex(PROPERTIES_FULL_TEXT_CONFIG, 4,
+                    new IAType[] { BuiltinType.ASTRING, BuiltinType.ASTRING, 
BuiltinType.ASTRING },
+                    Arrays.asList(List.of(FIELD_NAME_DATABASE_NAME), 
List.of(FIELD_NAME_DATAVERSE_NAME),
+                            List.of(FIELD_NAME_FULL_TEXT_CONFIG_NAME)),
+                    0, databaseFullTextConfigType(), true, new int[] { 0, 1, 2 
}), 3, 0);
+
     private final int payloadPosition;
     private final MetadataIndex index;
     private final int databaseNameIndex;
@@ -107,4 +115,16 @@ public final class FullTextConfigEntity {
                                         new 
AOrderedListType(BuiltinType.ASTRING, "FullTextFilterPipeline")) },
                         true);
     }
+
+    private static ARecordType databaseFullTextConfigType() {
+        return MetadataRecordTypes
+                .createRecordType(RECORD_NAME_FULL_TEXT_CONFIG,
+                        new String[] { FIELD_NAME_DATABASE_NAME, 
FIELD_NAME_DATAVERSE_NAME,
+                                FIELD_NAME_FULL_TEXT_CONFIG_NAME, 
FIELD_NAME_FULL_TEXT_TOKENIZER,
+                                FIELD_NAME_FULL_TEXT_FILTER_PIPELINE },
+                        new IAType[] { BuiltinType.ASTRING, 
BuiltinType.ASTRING, BuiltinType.ASTRING,
+                                
AUnionType.createNullableType(BuiltinType.ASTRING), 
AUnionType.createNullableType(
+                                        new 
AOrderedListType(BuiltinType.ASTRING, "FullTextFilterPipeline")) },
+                        true);
+    }
 }
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 aefb5a1bd5..49b3334792 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
@@ -20,6 +20,7 @@
 package org.apache.asterix.metadata.bootstrap;
 
 import static 
org.apache.asterix.metadata.bootstrap.MetadataPrimaryIndexes.PROPERTIES_FULL_TEXT_FILTER;
+import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_DATABASE_NAME;
 import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_DATAVERSE_NAME;
 import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_FULL_TEXT_FILTER_NAME;
 import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_FULL_TEXT_FILTER_TYPE;
@@ -40,6 +41,13 @@ public final class FullTextFilterEntity {
                     fullTextFilterType(), true, new int[] { 0, 1 }),
             2, -1);
 
+    private static final FullTextFilterEntity DB_FULL_TEXT_CONFIG =
+            new FullTextFilterEntity(new 
MetadataIndex(PROPERTIES_FULL_TEXT_FILTER, 4,
+                    new IAType[] { BuiltinType.ASTRING, BuiltinType.ASTRING, 
BuiltinType.ASTRING },
+                    Arrays.asList(List.of(FIELD_NAME_DATABASE_NAME), 
List.of(FIELD_NAME_DATAVERSE_NAME),
+                            List.of(FIELD_NAME_FULL_TEXT_FILTER_NAME)),
+                    0, databaseFullTextFilterType(), true, new int[] { 0, 1, 2 
}), 3, 0);
+
     private final int payloadPosition;
     private final MetadataIndex index;
     private final int databaseNameIndex;
@@ -94,4 +102,12 @@ public final class FullTextFilterEntity {
                         FIELD_NAME_FULL_TEXT_FILTER_TYPE },
                 new IAType[] { BuiltinType.ASTRING, BuiltinType.ASTRING, 
BuiltinType.ASTRING }, true);
     }
+
+    private static ARecordType databaseFullTextFilterType() {
+        return 
MetadataRecordTypes.createRecordType(RECORD_NAME_FULL_TEXT_FILTER,
+                new String[] { FIELD_NAME_DATABASE_NAME, 
FIELD_NAME_DATAVERSE_NAME, FIELD_NAME_FULL_TEXT_FILTER_NAME,
+                        FIELD_NAME_FULL_TEXT_FILTER_TYPE },
+                new IAType[] { BuiltinType.ASTRING, BuiltinType.ASTRING, 
BuiltinType.ASTRING, BuiltinType.ASTRING },
+                true);
+    }
 }
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 a180796752..a665f35d17 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
@@ -21,6 +21,7 @@ package org.apache.asterix.metadata.bootstrap;
 
 import static 
org.apache.asterix.metadata.bootstrap.MetadataPrimaryIndexes.PROPERTIES_FUNCTION;
 import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_ARITY;
+import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_DATABASE_NAME;
 import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_DATAVERSE_NAME;
 import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_DEFINITION;
 import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_DEPENDENCIES;
@@ -46,6 +47,12 @@ public final class FunctionEntity {
             Arrays.asList(List.of(FIELD_NAME_DATAVERSE_NAME), 
List.of(FIELD_NAME_NAME), List.of(FIELD_NAME_ARITY)), 0,
             functionType(), true, new int[] { 0, 1, 2 }), 3, -1);
 
+    private static final FunctionEntity DB_FUNCTION = new FunctionEntity(new 
MetadataIndex(PROPERTIES_FUNCTION, 5,
+            new IAType[] { BuiltinType.ASTRING, BuiltinType.ASTRING, 
BuiltinType.ASTRING, BuiltinType.ASTRING },
+            Arrays.asList(List.of(FIELD_NAME_DATABASE_NAME), 
List.of(FIELD_NAME_DATAVERSE_NAME),
+                    List.of(FIELD_NAME_NAME), List.of(FIELD_NAME_ARITY)),
+            0, databaseFunctionType(), true, new int[] { 0, 1, 2, 3 }), 4, 0);
+
     private final int payloadPosition;
     private final MetadataIndex index;
     private final int databaseNameIndex;
@@ -147,4 +154,22 @@ public final class FunctionEntity {
                 //IsOpen?
                 true);
     }
+
+    private static ARecordType databaseFunctionType() {
+        return MetadataRecordTypes.createRecordType(
+                // RecordTypeName
+                RECORD_NAME_FUNCTION,
+                // FieldNames
+                new String[] { FIELD_NAME_DATABASE_NAME, 
FIELD_NAME_DATAVERSE_NAME, FIELD_NAME_NAME, FIELD_NAME_ARITY,
+                        FIELD_NAME_PARAMS, FIELD_NAME_RETURN_TYPE, 
FIELD_NAME_DEFINITION, FIELD_NAME_LANGUAGE,
+                        FIELD_NAME_KIND, FIELD_NAME_DEPENDENCIES },
+                // FieldTypes
+                new IAType[] { BuiltinType.ASTRING, BuiltinType.ASTRING, 
BuiltinType.ASTRING, BuiltinType.ASTRING,
+                        new AOrderedListType(BuiltinType.ASTRING, null), 
BuiltinType.ASTRING, BuiltinType.ASTRING,
+                        BuiltinType.ASTRING, BuiltinType.ASTRING,
+                        new AOrderedListType(
+                                new AOrderedListType(new 
AOrderedListType(BuiltinType.ASTRING, null), null), null) },
+                //IsOpen?
+                true);
+    }
 }
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 95ba52faa1..fd23dd02a3 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
@@ -20,6 +20,7 @@
 package org.apache.asterix.metadata.bootstrap;
 
 import static 
org.apache.asterix.metadata.bootstrap.MetadataPrimaryIndexes.PROPERTIES_INDEX;
+import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_DATABASE_NAME;
 import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_DATASET_NAME;
 import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_DATAVERSE_NAME;
 import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_INDEX_NAME;
@@ -49,6 +50,12 @@ public final class IndexEntity {
                             0, indexType(), true, new int[] { 0, 1, 2 }),
                     3, -1);
 
+    private static final IndexEntity DB_INDEX = new IndexEntity(new 
MetadataIndex(PROPERTIES_INDEX, 5,
+            new IAType[] { BuiltinType.ASTRING, BuiltinType.ASTRING, 
BuiltinType.ASTRING, BuiltinType.ASTRING },
+            Arrays.asList(List.of(FIELD_NAME_DATABASE_NAME), 
List.of(FIELD_NAME_DATAVERSE_NAME),
+                    List.of(FIELD_NAME_DATASET_NAME), 
List.of(FIELD_NAME_INDEX_NAME)),
+            0, databaseIndexType(), true, new int[] { 0, 1, 2, 3 }), 4, 0);
+
     private final int payloadPosition;
     private final MetadataIndex index;
     private final int databaseNameIndex;
@@ -142,4 +149,21 @@ public final class IndexEntity {
                 //IsOpen?
                 true);
     }
+
+    private static ARecordType databaseIndexType() {
+        return MetadataRecordTypes.createRecordType(
+                // RecordTypeName
+                RECORD_NAME_INDEX,
+                // FieldNames
+                new String[] { FIELD_NAME_DATABASE_NAME, 
FIELD_NAME_DATAVERSE_NAME, FIELD_NAME_DATASET_NAME,
+                        FIELD_NAME_INDEX_NAME, FIELD_NAME_INDEX_STRUCTURE, 
FIELD_NAME_SEARCH_KEY, FIELD_NAME_IS_PRIMARY,
+                        FIELD_NAME_TIMESTAMP, FIELD_NAME_PENDING_OP },
+                // FieldTypes
+                new IAType[] { BuiltinType.ASTRING, BuiltinType.ASTRING, 
BuiltinType.ASTRING, BuiltinType.ASTRING,
+                        BuiltinType.ASTRING,
+                        new AOrderedListType(new 
AOrderedListType(BuiltinType.ASTRING, null), null),
+                        BuiltinType.ABOOLEAN, BuiltinType.ASTRING, 
BuiltinType.AINT32 },
+                //IsOpen?
+                true);
+    }
 }
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 1d99ead541..692d35e3ea 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
@@ -20,6 +20,7 @@
 package org.apache.asterix.metadata.bootstrap;
 
 import static 
org.apache.asterix.metadata.bootstrap.MetadataPrimaryIndexes.PROPERTIES_LIBRARY;
+import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_DATABASE_NAME;
 import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_DATAVERSE_NAME;
 import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_NAME;
 import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_TIMESTAMP;
@@ -40,6 +41,15 @@ public final class LibraryEntity {
                     new int[] { 0, 1 }),
             2, -1);
 
+    private static final LibraryEntity DB_LIBRARY =
+            new LibraryEntity(
+                    new MetadataIndex(PROPERTIES_LIBRARY, 4,
+                            new IAType[] { BuiltinType.ASTRING, 
BuiltinType.ASTRING, BuiltinType.ASTRING },
+                            Arrays.asList(List.of(FIELD_NAME_DATABASE_NAME), 
List.of(FIELD_NAME_DATAVERSE_NAME),
+                                    List.of(FIELD_NAME_NAME)),
+                            0, databaseLibraryType(), true, new int[] { 0, 1, 
2 }),
+                    3, 0);
+
     private final int payloadPosition;
     private final MetadataIndex index;
     private final int databaseNameIndex;
@@ -99,4 +109,17 @@ public final class LibraryEntity {
                 //IsOpen?
                 true);
     }
+
+    private static ARecordType databaseLibraryType() {
+        return MetadataRecordTypes.createRecordType(
+                // RecordTypeName
+                RECORD_NAME_LIBRARY,
+                // FieldNames
+                new String[] { FIELD_NAME_DATABASE_NAME, 
FIELD_NAME_DATAVERSE_NAME, FIELD_NAME_NAME,
+                        FIELD_NAME_TIMESTAMP },
+                // FieldTypes
+                new IAType[] { BuiltinType.ASTRING, BuiltinType.ASTRING, 
BuiltinType.ASTRING, BuiltinType.ASTRING },
+                //IsOpen?
+                true);
+    }
 }
diff --git 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/MetadataPrimaryIndexes.java
 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/MetadataPrimaryIndexes.java
index 1c7c1e0f6e..59e7ab70b6 100644
--- 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/MetadataPrimaryIndexes.java
+++ 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/MetadataPrimaryIndexes.java
@@ -60,6 +60,8 @@ public class MetadataPrimaryIndexes {
             new 
MetadataIndexImmutableProperties(MetadataConstants.FULL_TEXT_CONFIG_DATASET_NAME,
 16, 16);
     public static final MetadataIndexImmutableProperties 
PROPERTIES_FULL_TEXT_FILTER =
             new 
MetadataIndexImmutableProperties(MetadataConstants.FULL_TEXT_FILTER_DATASET_NAME,
 17, 17);
+    public static final MetadataIndexImmutableProperties PROPERTIES_DATABASE =
+            new 
MetadataIndexImmutableProperties(MetadataConstants.DATABASE_DATASET_NAME, 18, 
18);
 
     private MetadataPrimaryIndexes() {
     }
diff --git 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/MetadataRecordTypes.java
 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/MetadataRecordTypes.java
index 4f4d2b2223..5ae18caab9 100644
--- 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/MetadataRecordTypes.java
+++ 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/MetadataRecordTypes.java
@@ -44,6 +44,9 @@ public final class MetadataRecordTypes {
     public static final String FIELD_NAME_DATASOURCE_ADAPTER = 
"DatasourceAdapter";
     public static final String FIELD_NAME_DATATYPE_DATAVERSE_NAME = 
"DatatypeDataverseName";
     public static final String FIELD_NAME_DATATYPE_NAME = "DatatypeName";
+    public static final String FIELD_NAME_DATABASE_NAME = "DatabaseName";
+    public static final String FIELD_NAME_DATABASE_ID = "DatabaseId";
+    public static final String FIELD_NAME_SYSTEM_DATABASE = "SystemDatabase";
     public static final String FIELD_NAME_DATAVERSE_NAME = "DataverseName";
     public static final String FIELD_NAME_DATA_FORMAT = "DataFormat";
     public static final String FIELD_NAME_DEFAULT = "Default";
@@ -228,6 +231,9 @@ public final class MetadataRecordTypes {
     //---------------------------------------- Data Type 
----------------------------------------//
     public static final String RECORD_NAME_DATATYPE = "DatatypeRecordType";
 
+    //-------------------------------------- Database 
------------------------------------------//
+    public static final String RECORD_NAME_DATABASE = "DatabaseRecordType";
+
     //-------------------------------------- Dataverse 
------------------------------------------//
     public static final String RECORD_NAME_DATAVERSE = "DataverseRecordType";
 
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 05bf114776..ba44f44bd0 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
@@ -20,6 +20,7 @@
 package org.apache.asterix.metadata.bootstrap;
 
 import static 
org.apache.asterix.metadata.bootstrap.MetadataPrimaryIndexes.PROPERTIES_SYNONYM;
+import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_DATABASE_NAME;
 import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_DATAVERSE_NAME;
 import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_OBJECT_DATAVERSE_NAME;
 import static 
org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_OBJECT_NAME;
@@ -41,6 +42,14 @@ public final class SynonymEntity {
                     synonymType(), true, new int[] { 0, 1 }),
             2, -1);
 
+    private static final SynonymEntity DB_SYNONYM = new SynonymEntity(
+            new MetadataIndex(PROPERTIES_SYNONYM, 4,
+                    new IAType[] { BuiltinType.ASTRING, BuiltinType.ASTRING, 
BuiltinType.ASTRING },
+                    Arrays.asList(List.of(FIELD_NAME_DATABASE_NAME), 
List.of(FIELD_NAME_DATAVERSE_NAME),
+                            List.of(FIELD_NAME_SYNONYM_NAME)),
+                    0, databaseSynonymType(), true, new int[] { 0, 1, 2 }),
+            3, 0);
+
     private final int payloadPosition;
     private final MetadataIndex index;
     private final int databaseNameIndex;
@@ -107,4 +116,18 @@ public final class SynonymEntity {
                 //IsOpen?
                 true);
     }
+
+    private static ARecordType databaseSynonymType() {
+        return MetadataRecordTypes.createRecordType(
+                // RecordTypeName
+                RECORD_NAME_SYNONYM,
+                // FieldNames
+                new String[] { FIELD_NAME_DATABASE_NAME, 
FIELD_NAME_DATAVERSE_NAME, FIELD_NAME_SYNONYM_NAME,
+                        FIELD_NAME_OBJECT_DATAVERSE_NAME, 
FIELD_NAME_OBJECT_NAME },
+                // FieldTypes
+                new IAType[] { BuiltinType.ASTRING, BuiltinType.ASTRING, 
BuiltinType.ASTRING, BuiltinType.ASTRING,
+                        BuiltinType.ASTRING },
+                //IsOpen?
+                true);
+    }
 }
diff --git 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/MetadataConstants.java
 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/MetadataConstants.java
index 0f0ea4044b..60d97d6fa3 100644
--- 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/MetadataConstants.java
+++ 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/MetadataConstants.java
@@ -39,6 +39,7 @@ public class MetadataConstants {
     // Name of the node group where metadata is stored on.
     public static final String METADATA_NODEGROUP_NAME = "MetadataGroup";
 
+    public static final String DATABASE_DATASET_NAME = "Database";
     public static final String DATAVERSE_DATASET_NAME = "Dataverse";
     public static final String DATASET_DATASET_NAME = "Dataset";
     public static final String INDEX_DATASET_NAME = "Index";

Reply via email to