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

Public 成员函数

RC init (LogHandler &log_handler, int32_t buffer_pool_id, int32_t record_size, StorageFormat storage_format)
 
RC init_new_page (Frame *frame, PageNum page_num, span< const char > data)
 初始化一个新的页面 更多...
 
RC insert_record (Frame *frame, const RID &rid, const char *record)
 插入一条记录 更多...
 
RC delete_record (Frame *frame, const RID &rid)
 删除一条记录 更多...
 
RC update_record (Frame *frame, const RID &rid, const char *record)
 更新一条记录 更多...
 

Private 属性

LogHandlerlog_handler_ = nullptr
 
int32_t buffer_pool_id_ = -1
 
int32_t record_size_ = -1
 
StorageFormat storage_format_ = StorageFormat::ROW_FORMAT
 

成员函数说明

◆ delete_record()

RC RecordLogHandler::delete_record ( Frame frame,
const RID rid 
)

删除一条记录

参数
frame页帧
rid记录的位置

◆ init_new_page()

RC RecordLogHandler::init_new_page ( Frame frame,
PageNum  page_num,
span< const char >  data 
)

初始化一个新的页面

记录一个初始化新页面的日志。

注解
这条日志通常伴随着一个buffer pool中创建页面的日志,这时候其实存在一个问题: 通常情况下日志是这样的:
  1. buffer pool.allocate page
  2. record_log_handler.init_new_page 如果第一条日志记录下来了,但是第二条日志没有记录下来,就会出现问题。就丢失了一个页面, 或者页面在访问时会出现异常。
参数
frame页帧
page_num页面编号
data页面数据目前主要是 column index

◆ insert_record()

RC RecordLogHandler::insert_record ( Frame frame,
const RID rid,
const char *  record 
)

插入一条记录

参数
frame页帧
rid记录的位置
record记录的内容

◆ update_record()

RC RecordLogHandler::update_record ( Frame frame,
const RID rid,
const char *  record 
)

更新一条记录

参数
frame页帧
rid记录的位置
record更新后的记录。不需要做回滚,所以不用记录原先的数据

更新数据时,通常只更新其中几个字段,这里记录所有数据,是可以优化的。


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