CMU_15-445_PROJECT#3

TASK #1 - SYSTEM CATALOG

在这个任务中,我们会修改rc/include/catalog/catalog.h以允许 DBMS 将新表添加到数据库并使用名称或内部对象标识符 ( table_oid_t) 检索它们。

我们在最新的BusTub中可以看到catalog的实现,但是这个版本只能实现通过6个测试,

先来看看TableInfo的结构体:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
struct TableInfo {
/**
* Construct a new TableInfo instance.
* @param schema The table schema
* @param name The table name
* @param table An owning pointer to the table heap
* @param oid The unique OID for the table
*/
TableInfo(Schema schema, std::string name, std::unique_ptr<TableHeap> &&table, table_oid_t oid)
: schema_{std::move(schema)}, name_{std::move(name)}, table_{std::move(table)}, oid_{oid} {}
/** The table schema */
Schema schema_;
/** The table name */
const std::string name_;
/** An owning pointer to the table heap */
std::unique_ptr<TableHeap> table_;
/** The table OID */
const table_oid_t oid_;
};

我们可以看看catalog的成员变量:

1
2
3
4
5
6
7
8
  std::unordered_map<table_oid_t, std::unique_ptr<TableInfo>> tables_;//无序map,也就是表信息集合
std::unordered_map<std::string, table_oid_t> table_names_;//表名集合
//这里我们可以看出寻表是表名->oid->表信息
std::atomic<table_oid_t> next_table_oid_{0};//用atomic类来做多线程编程
//index与上述结构相似
std::unordered_map<index_oid_t, std::unique_ptr<IndexInfo>> indexes_;
std::unordered_map<std::string, std::unordered_map<std::string, index_oid_t>> index_names_;//在index_names_中,是以<string,<string,index_oid_t>>作为结构,第一个string是index的name,第二个string是
std::atomic<index_oid_t> next_index_oid_{0};
1
2
3
4
5
6
7
/**
* Create a new table and return its metadata.
* @param txn The transaction in which the table is being created
* @param table_name The name of the new table
* @param schema The schema of the new table
* @return A (non-owning) pointer to the metadata for the table
*/

我们从上面的注释中就可以得知函数如何完成,

我们先来看看这个Schema类,如下所示:


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!