MiniOB 1
MiniOB is one mini database, helping developers to learn how database works.
|
负责处理 PAX 存储格式的页面中各种操作 更多...
#include <record_manager.h>
Public 成员函数 | |
virtual RC | insert_record (const char *data, RID *rid) override |
插入一条记录 更多... | |
virtual RC | delete_record (const RID *rid) override |
删除指定的记录 更多... | |
virtual RC | get_record (const RID &rid, Record &record) override |
获取指定位置的记录数据 更多... | |
virtual RC | get_chunk (Chunk &chunk) override |
以 Chunk 格式获取整个页面中指定列的所有记录。 更多... | |
![]() | |
RecordPageHandler (StorageFormat storage_format) | |
RC | init (DiskBufferPool &buffer_pool, LogHandler &log_handler, PageNum page_num, ReadWriteMode mode) |
初始化 更多... | |
RC | recover_init (DiskBufferPool &buffer_pool, PageNum page_num) |
数据库恢复时,与普通的运行场景有所不同,不做任何并发操作,也不需要加锁 更多... | |
RC | init_empty_page (DiskBufferPool &buffer_pool, LogHandler &log_handler, PageNum page_num, int record_size, TableMeta *table_meta) |
对一个新的页面做初始化,初始化关于该页面记录信息的页头PageHeader 更多... | |
RC | init_empty_page (DiskBufferPool &buffer_pool, LogHandler &log_handler, PageNum page_num, int record_size, int col_num, const char *col_idx_data) |
对一个新的页面做初始化,初始化关于该页面记录信息的页头PageHeader,该函数用于日志回放时。 更多... | |
RC | cleanup () |
操作结束后做的清理工作,比如释放页面、解锁 | |
virtual RC | insert_record (const char *data, RID *rid) |
插入一条记录 更多... | |
virtual RC | recover_insert_record (const char *data, const RID &rid) |
数据库恢复时,在指定位置插入数据 更多... | |
virtual RC | delete_record (const RID *rid) |
删除指定的记录 更多... | |
virtual RC | update_record (const RID &rid, const char *data) |
virtual RC | get_record (const RID &rid, Record &record) |
获取指定位置的记录数据 更多... | |
virtual RC | get_chunk (Chunk &chunk) |
获取整个页面中指定列的所有记录。 更多... | |
PageNum | get_page_num () const |
返回该记录页的页号 | |
bool | is_full () const |
当前页面是否已经没有空闲位置插入新的记录 | |
Private 成员函数 | |
char * | get_field_data (SlotNum slot_num, int col_id) |
int | get_field_len (int col_id) |
额外继承的成员函数 | |
![]() | |
static RecordPageHandler * | create (StorageFormat format) |
![]() | |
void | fix_record_capacity () |
char * | get_record_data (SlotNum slot_num) |
获取指定槽位的记录数据 更多... | |
![]() | |
DiskBufferPool * | disk_buffer_pool_ = nullptr |
当前操作的buffer pool(文件) | |
RecordLogHandler | log_handler_ |
当前操作的日志处理器 | |
Frame * | frame_ = nullptr |
当前操作页面关联的frame(frame的更多概念可以参考buffer pool和frame) | |
ReadWriteMode | rw_mode_ = ReadWriteMode::READ_WRITE |
当前的操作是否都是只读的 | |
PageHeader * | page_header_ = nullptr |
当前页面上页面头 | |
char * | bitmap_ = nullptr |
当前页面上record分配状态信息bitmap内存起始位置 | |
StorageFormat | storage_format_ |
负责处理 PAX 存储格式的页面中各种操作
PAX 格式实现,当前定长记录模式下每个页面的组织大概是这样的:
更多细节可参考:docs/design/miniob-pax-storage.md
|
overridevirtual |
|
overridevirtual |
|
overridevirtual |
插入一条记录
data | 要插入的记录 |
rid | 如果插入成功,通过这个参数返回插入的位置 注意:需要将record 按列拆分,在 Page 内按 PAX 格式存储。 |
重载 RecordPageHandler .