MiniOB 1
MiniOB is one mini database, helping developers to learn how database works.
|
遍历某个文件中所有记录 更多...
#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 属性 | |
Table * | table_ = nullptr |
当前遍历的是哪张表。这个字段仅供事务函数使用,如果设计合适,可以去掉 | |
DiskBufferPool * | disk_buffer_pool_ = nullptr |
当前访问的文件 | |
Trx * | trx_ = nullptr |
当前是哪个事务在遍历 | |
bool | readonly_ = false |
遍历出来的数据,是否可能对它做修改 | |
BufferPoolIterator | bp_iterator_ |
遍历buffer pool的所有页面 | |
ConditionFilter * | condition_filter_ = nullptr |
过滤record | |
RecordPageHandler | record_page_handler_ |
处理文件某页面的记录 | |
RecordPageIterator | record_page_iterator_ |
遍历某个页面上的所有record | |
Record | next_record_ |
获取的记录放在这里缓存起来 | |
遍历某个文件中所有记录
遍历所有的页面,同时访问这些页面中所有的记录
|
private |
获取该文件中的下一条记录
从当前位置开始找到下一条有效的记录
如果当前页面还有记录没有访问,就遍历当前的页面。 当前页面遍历完了,就遍历下一个页面,然后找到有效的记录
|
private |
获取一个页面内的下一条记录
遍历当前页面,尝试找到一条有效的记录
bool RecordFileScanner::has_next | ( | ) |
判断是否还有数据
判断完成后调用next获取下一条数据
RC RecordFileScanner::next | ( | Record & | record | ) |
获取下一条记录
record | 返回的下一条记录 |
获取下一条记录之前先调用has_next()判断是否还有数据
RC RecordFileScanner::open_scan | ( | Table * | table, |
DiskBufferPool & | buffer_pool, | ||
Trx * | trx, | ||
bool | readonly, | ||
ConditionFilter * | condition_filter | ||
) |
打开一个文件扫描。
如果条件不为空,则要对每条记录进行条件比较,只有满足所有条件的记录才被返回
table | 遍历的哪张表 |
buffer_pool | 访问的文件 |
readonly | 当前是否只读操作。访问数据时,需要对页面加锁。比如 删除时也需要遍历找到数据,然后删除,这时就需要加写锁 |
condition_filter | 做一些初步过滤操作 |