MiniOB 1
MiniOB is one mini database, helping developers to learn how database works.
载入中...
搜索中...
未找到
Public 成员函数 | Protected 成员函数 | Protected 属性 | 友元 | 所有成员列表
RecordPageHandler类 参考

负责处理一个页面中各种操作,比如插入记录、删除记录或者查找记录 更多...

#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 属性

DiskBufferPooldisk_buffer_pool_ = nullptr
 当前操作的buffer pool(文件)
 
Frameframe_ = nullptr
 当前操作页面关联的frame(frame的更多概念可以参考buffer pool和frame)
 
bool readonly_ = false
 当前的操作是否都是只读的
 
PageHeaderpage_header_ = nullptr
 当前页面上页面头
 
char * bitmap_ = nullptr
 当前页面上record分配状态信息bitmap内存起始位置
 

友元

class RecordPageIterator
 

详细描述

负责处理一个页面中各种操作,比如插入记录、删除记录或者查找记录

当前定长记录模式下每个页面的组织大概是这样的:

| PageHeader | record allocate bitmap |
|------------|------------------------|
| record1 | record2 | ..... | recordN |
数据文件,按照页面来组织,每一页都存放一些记录/数据行
Definition: record_manager.h:64

成员函数说明

◆ delete_record()

RC RecordPageHandler::delete_record ( const RID rid)

删除指定的记录

参数
rid要删除的记录标识

◆ fix_record_capacity()

void RecordPageHandler::fix_record_capacity ( )
inlineprotected

前面在计算record_capacity时并没有考虑对齐,但第一个record需要8字节对齐 因此按此前计算的record_capacity,最后一个记录的部分数据可能会被挤出页面 所以需要对record_capacity进行修正,保证记录不会溢出

◆ get_record()

RC RecordPageHandler::get_record ( const RID rid,
Record rec 
)

获取指定位置的记录数据

参数
rid指定的位置
rec返回指定的数据。这里不会将数据复制出来,而是使用指针,所以调用者必须保证数据使用期间受到保护

◆ get_record_data()

char * RecordPageHandler::get_record_data ( SlotNum  slot_num)
inlineprotected

获取指定槽位的记录数据

参数
指定的记录槽位

◆ init()

RC RecordPageHandler::init ( DiskBufferPool buffer_pool,
PageNum  page_num,
bool  readonly 
)

初始化

参数
buffer_pool关联某个文件时,都通过buffer pool来做读写文件
page_num当前处理哪个页面
readonly是否只读。在访问页面时,需要对页面加锁

◆ init_empty_page()

RC RecordPageHandler::init_empty_page ( DiskBufferPool buffer_pool,
PageNum  page_num,
int  record_size 
)

对一个新的页面做初始化,初始化关于该页面记录信息的页头PageHeader

参数
buffer_pool关联某个文件时,都通过buffer pool来做读写文件
page_num当前处理哪个页面
record_size每个记录的大小

◆ insert_record()

RC RecordPageHandler::insert_record ( const char *  data,
RID rid 
)

插入一条记录

参数
data要插入的记录
rid如果插入成功,通过这个参数返回插入的位置

◆ recover_init()

RC RecordPageHandler::recover_init ( DiskBufferPool buffer_pool,
PageNum  page_num 
)

数据库恢复时,与普通的运行场景有所不同,不做任何并发操作,也不需要加锁

参数
buffer_pool关联某个文件时,都通过buffer pool来做读写文件
page_num操作的页面编号

◆ recover_insert_record()

RC RecordPageHandler::recover_insert_record ( const char *  data,
const RID rid 
)

数据库恢复时,在指定位置插入数据

参数
data要插入的数据行
rid插入的位置

该类的文档由以下文件生成: