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

遍历某个文件中所有记录 更多...

#include <record_manager.h>

Public 成员函数

RC open_scan (Table *table, DiskBufferPool &buffer_pool, Trx *trx, bool readonly, ConditionFilter *condition_filter)
 打开一个文件扫描。 更多...
 
RC close_scan ()
 关闭一个文件扫描,释放相应的资源
 
bool has_next ()
 判断是否还有数据 更多...
 
RC next (Record &record)
 获取下一条记录 更多...
 

Private 成员函数

RC fetch_next_record ()
 获取该文件中的下一条记录 更多...
 
RC fetch_next_record_in_page ()
 获取一个页面内的下一条记录 更多...
 

Private 属性

Tabletable_ = nullptr
 当前遍历的是哪张表。这个字段仅供事务函数使用,如果设计合适,可以去掉
 
DiskBufferPooldisk_buffer_pool_ = nullptr
 当前访问的文件
 
Trxtrx_ = nullptr
 当前是哪个事务在遍历
 
bool readonly_ = false
 遍历出来的数据,是否可能对它做修改
 
BufferPoolIterator bp_iterator_
 遍历buffer pool的所有页面
 
ConditionFiltercondition_filter_ = nullptr
 过滤record
 
RecordPageHandler record_page_handler_
 处理文件某页面的记录
 
RecordPageIterator record_page_iterator_
 遍历某个页面上的所有record
 
Record next_record_
 获取的记录放在这里缓存起来
 

详细描述

遍历某个文件中所有记录

遍历所有的页面,同时访问这些页面中所有的记录

成员函数说明

◆ fetch_next_record()

RC RecordFileScanner::fetch_next_record ( )
private

获取该文件中的下一条记录

从当前位置开始找到下一条有效的记录

如果当前页面还有记录没有访问,就遍历当前的页面。 当前页面遍历完了,就遍历下一个页面,然后找到有效的记录

◆ fetch_next_record_in_page()

RC RecordFileScanner::fetch_next_record_in_page ( )
private

获取一个页面内的下一条记录

遍历当前页面,尝试找到一条有效的记录

◆ has_next()

bool RecordFileScanner::has_next ( )

判断是否还有数据

判断完成后调用next获取下一条数据

◆ next()

RC RecordFileScanner::next ( Record record)

获取下一条记录

参数
record返回的下一条记录

获取下一条记录之前先调用has_next()判断是否还有数据

◆ open_scan()

RC RecordFileScanner::open_scan ( Table table,
DiskBufferPool buffer_pool,
Trx trx,
bool  readonly,
ConditionFilter condition_filter 
)

打开一个文件扫描。

如果条件不为空,则要对每条记录进行条件比较,只有满足所有条件的记录才被返回

参数
table遍历的哪张表
buffer_pool访问的文件
readonly当前是否只读操作。访问数据时,需要对页面加锁。比如 删除时也需要遍历找到数据,然后删除,这时就需要加写锁
condition_filter做一些初步过滤操作

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