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 |