MiniOB 1
MiniOB is one mini database, helping developers to learn how database works.
|
表 更多...
#include <table.h>
Public 成员函数 | |
RC | create (int32_t table_id, const char *path, const char *name, const char *base_dir, int attribute_count, const AttrInfoSqlNode attributes[]) |
RC | open (const char *meta_file, const char *base_dir) |
RC | make_record (int value_num, const Value *values, Record &record) |
根据给定的字段生成一个记录/行 更多... | |
RC | insert_record (Record &record) |
在当前的表中插入一条记录 更多... | |
RC | delete_record (const Record &record) |
RC | visit_record (const RID &rid, bool readonly, std::function< void(Record &)> visitor) |
RC | get_record (const RID &rid, Record &record) |
RC | recover_insert_record (Record &record) |
RC | create_index (Trx *trx, const FieldMeta *field_meta, const char *index_name) |
RC | get_record_scanner (RecordFileScanner &scanner, Trx *trx, bool readonly) |
RecordFileHandler * | record_handler () const |
int32_t | table_id () const |
const char * | name () const |
const TableMeta & | table_meta () const |
RC | sync () |
Index * | find_index (const char *index_name) const |
Index * | find_index_by_field (const char *field_name) const |
Private 成员函数 | |
RC | insert_entry_of_indexes (const char *record, const RID &rid) |
RC | delete_entry_of_indexes (const char *record, const RID &rid, bool error_on_not_exists) |
RC | init_record_handler (const char *base_dir) |
Private 属性 | |
std::string | base_dir_ |
TableMeta | table_meta_ |
DiskBufferPool * | data_buffer_pool_ = nullptr |
RecordFileHandler * | record_handler_ = nullptr |
数据文件关联的buffer pool | |
std::vector< Index * > | indexes_ |
记录操作 | |
表
RC Table::create | ( | int32_t | table_id, |
const char * | path, | ||
const char * | name, | ||
const char * | base_dir, | ||
int | attribute_count, | ||
const AttrInfoSqlNode | attributes[] | ||
) |
创建一个表
path | 元数据保存的文件(完整路径) |
name | 表名 |
base_dir | 表数据存放的路径 |
attribute_count | 字段个数 |
attributes | 字段 |
接下来将这个索引放到表的元数据中
内存中有一份元数据,磁盘文件也有一份元数据。修改磁盘文件时,先创建一个临时文件,写入完成后再rename为正式文件 这样可以防止文件内容不完整
RC Table::insert_record | ( | Record & | record | ) |
在当前的表中插入一条记录
在表文件和索引中插入关联数据。这里只管在表中插入数据,不关心事务相关操作。
record[in/out] | 传入的数据包含具体的数据,插入成功会通过此字段返回RID |
根据给定的字段生成一个记录/行
通常是由用户传过来的字段,按照schema信息组装成一个record。
value_num | 字段的个数 |
values | 每个字段的值 |
record | 生成的记录数据 |
RC Table::open | ( | const char * | meta_file, |
const char * | base_dir | ||
) |
打开一个表
meta_file | 保存表元数据的文件完整路径 |
base_dir | 表所在的文件夹,表记录数据文件、索引数据文件存放位置 |