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

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

#include <record_manager.h>

类 RecordPageHandler 继承关系图:
PaxRecordPageHandler RowRecordPageHandler

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 RecordPageHandlercreate (StorageFormat format)
 

Protected 成员函数

void fix_record_capacity ()
 
char * get_record_data (SlotNum slot_num)
 获取指定槽位的记录数据 更多...
 

Protected 属性

DiskBufferPooldisk_buffer_pool_ = nullptr
 当前操作的buffer pool(文件)
 
RecordLogHandler log_handler_
 当前操作的日志处理器
 
Frameframe_ = nullptr
 当前操作页面关联的frame(frame的更多概念可以参考buffer pool和frame)
 
ReadWriteMode rw_mode_ = ReadWriteMode::READ_WRITE
 当前的操作是否都是只读的
 
PageHeaderpage_header_ = nullptr
 当前页面上页面头
 
char * bitmap_ = nullptr
 当前页面上record分配状态信息bitmap内存起始位置
 
StorageFormat storage_format_
 

友元

class RecordPageIterator
 

详细描述

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

成员函数说明

◆ delete_record()

virtual RC RecordPageHandler::delete_record ( const RID rid)
inlinevirtual

删除指定的记录

参数
rid要删除的记录标识

RowRecordPageHandler , 以及 PaxRecordPageHandler 重载.

◆ fix_record_capacity()

void RecordPageHandler::fix_record_capacity ( )
inlineprotected

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

◆ get_chunk()

virtual RC RecordPageHandler::get_chunk ( Chunk chunk)
inlinevirtual

获取整个页面中指定列的所有记录。

参数
chunk由 chunk.column(i).col_id() 指定列。 只需由 PaxRecordPageHandler 实现。

PaxRecordPageHandler 重载.

◆ get_record()

virtual RC RecordPageHandler::get_record ( const RID rid,
Record record 
)
inlinevirtual

获取指定位置的记录数据

参数
rid指定的位置
record获取到的记录结果

RowRecordPageHandler , 以及 PaxRecordPageHandler 重载.

◆ get_record_data()

char * RecordPageHandler::get_record_data ( SlotNum  slot_num)
inlineprotected

获取指定槽位的记录数据

参数
指定的记录槽位

◆ init()

RC RecordPageHandler::init ( DiskBufferPool buffer_pool,
LogHandler log_handler,
PageNum  page_num,
ReadWriteMode  mode 
)

初始化

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

◆ init_empty_page() [1/2]

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列索引数据

◆ init_empty_page() [2/2]

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表的元数据

◆ insert_record()

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

插入一条记录

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

RowRecordPageHandler , 以及 PaxRecordPageHandler 重载.

◆ recover_init()

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

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

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

◆ recover_insert_record()

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

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

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

RowRecordPageHandler 重载.


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