|
MiniOB 1
MiniOB is one mini database, helping developers to learn how database works.
|
负责处理一个页面中各种操作,比如插入记录、删除记录或者查找记录 更多...
#include <record_manager.h>
Public 成员函数 | |
| 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 |
| 当前页面是否已经没有空闲位置插入新的记录 | |
静态 Public 成员函数 | |
| static RecordPageHandler * | create (StorageFormat format) |
Protected 成员函数 | |
| void | fix_record_capacity () |
| char * | get_record_data (SlotNum slot_num) |
| 获取指定槽位的记录数据 更多... | |
Protected 属性 | |
| 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_ |
友元 | |
| class | RecordPageIterator |
负责处理一个页面中各种操作,比如插入记录、删除记录或者查找记录
|
inlinevirtual |
|
inlineprotected |
前面在计算record_capacity时并没有考虑对齐,但第一个record需要8字节对齐 因此按此前计算的record_capacity,最后一个记录的部分数据可能会被挤出页面 所以需要对record_capacity进行修正,保证记录不会溢出
|
inlinevirtual |
获取整个页面中指定列的所有记录。
| chunk | 由 chunk.column(i).col_id() 指定列。 只需由 PaxRecordPageHandler 实现。 |
被 PaxRecordPageHandler 重载.
|
inlineprotected |
获取指定槽位的记录数据
| 指定的记录槽位 |
| RC RecordPageHandler::init | ( | DiskBufferPool & | buffer_pool, |
| LogHandler & | log_handler, | ||
| PageNum | page_num, | ||
| ReadWriteMode | mode | ||
| ) |
初始化
| buffer_pool | 关联某个文件时,都通过buffer pool来做读写文件 |
| page_num | 当前处理哪个页面 |
| mode | 是否只读。在访问页面时,需要对页面加锁 |
| RC RecordPageHandler::init_empty_page | ( | DiskBufferPool & | buffer_pool, |
| LogHandler & | log_handler, | ||
| PageNum | page_num, | ||
| int | record_size, | ||
| int | col_num, | ||
| const char * | col_idx_data | ||
| ) |
对一个新的页面做初始化,初始化关于该页面记录信息的页头PageHeader,该函数用于日志回放时。
| buffer_pool | 关联某个文件时,都通过buffer pool来做读写文件 |
| page_num | 当前处理哪个页面 |
| record_size | 每个记录的大小 |
| col_num | 表中包含的列数 |
| col_idx_data | 列索引数据 |
| RC RecordPageHandler::init_empty_page | ( | DiskBufferPool & | buffer_pool, |
| LogHandler & | log_handler, | ||
| PageNum | page_num, | ||
| int | record_size, | ||
| TableMeta * | table_meta | ||
| ) |
对一个新的页面做初始化,初始化关于该页面记录信息的页头PageHeader
| buffer_pool | 关联某个文件时,都通过buffer pool来做读写文件 |
| page_num | 当前处理哪个页面 |
| record_size | 每个记录的大小 |
| table_meta | 表的元数据 |
|
inlinevirtual |
| RC RecordPageHandler::recover_init | ( | DiskBufferPool & | buffer_pool, |
| PageNum | page_num | ||
| ) |
数据库恢复时,与普通的运行场景有所不同,不做任何并发操作,也不需要加锁
| buffer_pool | 关联某个文件时,都通过buffer pool来做读写文件 |
| page_num | 操作的页面编号 |
|
inlinevirtual |