|
MiniOB 1
MiniOB is one mini database, helping developers to learn how database works.
|
负责处理一个页面中各种操作,比如插入记录、删除记录或者查找记录 更多...
#include <record_manager.h>
Public 成员函数 | |
| RC | init (DiskBufferPool &buffer_pool, PageNum page_num, bool readonly) |
| 初始化 更多... | |
| RC | recover_init (DiskBufferPool &buffer_pool, PageNum page_num) |
| 数据库恢复时,与普通的运行场景有所不同,不做任何并发操作,也不需要加锁 更多... | |
| RC | init_empty_page (DiskBufferPool &buffer_pool, PageNum page_num, int record_size) |
| 对一个新的页面做初始化,初始化关于该页面记录信息的页头PageHeader 更多... | |
| RC | cleanup () |
| 操作结束后做的清理工作,比如释放页面、解锁 | |
| RC | insert_record (const char *data, RID *rid) |
| 插入一条记录 更多... | |
| RC | recover_insert_record (const char *data, const RID &rid) |
| 数据库恢复时,在指定位置插入数据 更多... | |
| RC | delete_record (const RID *rid) |
| 删除指定的记录 更多... | |
| RC | get_record (const RID *rid, Record *rec) |
| 获取指定位置的记录数据 更多... | |
| PageNum | get_page_num () const |
| 返回该记录页的页号 | |
| bool | is_full () const |
| 当前页面是否已经没有空闲位置插入新的记录 | |
Protected 成员函数 | |
| void | fix_record_capacity () |
| char * | get_record_data (SlotNum slot_num) |
| 获取指定槽位的记录数据 更多... | |
Protected 属性 | |
| DiskBufferPool * | disk_buffer_pool_ = nullptr |
| 当前操作的buffer pool(文件) | |
| Frame * | frame_ = nullptr |
| 当前操作页面关联的frame(frame的更多概念可以参考buffer pool和frame) | |
| bool | readonly_ = false |
| 当前的操作是否都是只读的 | |
| PageHeader * | page_header_ = nullptr |
| 当前页面上页面头 | |
| char * | bitmap_ = nullptr |
| 当前页面上record分配状态信息bitmap内存起始位置 | |
友元 | |
| class | RecordPageIterator |
负责处理一个页面中各种操作,比如插入记录、删除记录或者查找记录
当前定长记录模式下每个页面的组织大概是这样的:
| RC RecordPageHandler::delete_record | ( | const RID * | rid | ) |
删除指定的记录
| rid | 要删除的记录标识 |
|
inlineprotected |
前面在计算record_capacity时并没有考虑对齐,但第一个record需要8字节对齐 因此按此前计算的record_capacity,最后一个记录的部分数据可能会被挤出页面 所以需要对record_capacity进行修正,保证记录不会溢出
获取指定位置的记录数据
| rid | 指定的位置 |
| rec | 返回指定的数据。这里不会将数据复制出来,而是使用指针,所以调用者必须保证数据使用期间受到保护 |
|
inlineprotected |
获取指定槽位的记录数据
| 指定的记录槽位 |
| RC RecordPageHandler::init | ( | DiskBufferPool & | buffer_pool, |
| PageNum | page_num, | ||
| bool | readonly | ||
| ) |
初始化
| buffer_pool | 关联某个文件时,都通过buffer pool来做读写文件 |
| page_num | 当前处理哪个页面 |
| readonly | 是否只读。在访问页面时,需要对页面加锁 |
| RC RecordPageHandler::init_empty_page | ( | DiskBufferPool & | buffer_pool, |
| PageNum | page_num, | ||
| int | record_size | ||
| ) |
对一个新的页面做初始化,初始化关于该页面记录信息的页头PageHeader
| buffer_pool | 关联某个文件时,都通过buffer pool来做读写文件 |
| page_num | 当前处理哪个页面 |
| record_size | 每个记录的大小 |
| RC RecordPageHandler::insert_record | ( | const char * | data, |
| RID * | rid | ||
| ) |
插入一条记录
| data | 要插入的记录 |
| rid | 如果插入成功,通过这个参数返回插入的位置 |
| RC RecordPageHandler::recover_init | ( | DiskBufferPool & | buffer_pool, |
| PageNum | page_num | ||
| ) |
数据库恢复时,与普通的运行场景有所不同,不做任何并发操作,也不需要加锁
| buffer_pool | 关联某个文件时,都通过buffer pool来做读写文件 |
| page_num | 操作的页面编号 |
| RC RecordPageHandler::recover_insert_record | ( | const char * | data, |
| const RID & | rid | ||
| ) |
数据库恢复时,在指定位置插入数据
| data | 要插入的数据行 |
| rid | 插入的位置 |