|
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 | 做一些初步过滤操作 |