MiniOB 1
MiniOB is one mini database, helping developers to learn how database works.
载入中...
搜索中...
未找到
heap_record_scanner.h
1/* Copyright (c) 2021 OceanBase and/or its affiliates. All rights reserved.
2miniob is licensed under Mulan PSL v2.
3You can use this software according to the terms and conditions of the Mulan PSL v2.
4You may obtain a copy of Mulan PSL v2 at:
5 http://license.coscl.org.cn/MulanPSL2
6THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
7EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
8MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
9See the Mulan PSL v2 for more details. */
10
11#pragma once
12
13#include "storage/record/record_scanner.h"
14#include "storage/buffer/disk_buffer_pool.h"
15#include "storage/trx/trx.h"
16
23{
24public:
25 HeapRecordScanner(Table *table, DiskBufferPool &buffer_pool, Trx *trx, LogHandler &log_handler, ReadWriteMode mode,
26 ConditionFilter *condition_filter)
27 : table_(table),
28 disk_buffer_pool_(&buffer_pool),
29 trx_(trx),
30 log_handler_(&log_handler),
31 rw_mode_(mode),
32 condition_filter_(condition_filter)
33 {}
34 ~HeapRecordScanner() override { close_scan(); }
35
39 RC open_scan() override;
40
44 RC close_scan() override;
45
51 RC next(Record &record) override;
52
53private:
58
63
64private:
65 // TODO 对于一个纯粹的record遍历器来说,不应该关心表和事务
66 Table *table_ = nullptr;
67
69 Trx *trx_ = nullptr;
70 LogHandler *log_handler_ = nullptr;
71 ReadWriteMode rw_mode_ = ReadWriteMode::READ_WRITE;
72
78};
用于遍历BufferPool中的所有页面
Definition: disk_buffer_pool.h:167
Definition: condition_filter.h:31
BufferPool的实现
Definition: disk_buffer_pool.h:189
遍历某个文件中所有记录
Definition: heap_record_scanner.h:23
RC fetch_next_record()
获取该文件中的下一条记录
Definition: heap_record_scanner.cpp:41
RC fetch_next_record_in_page()
获取一个页面内的下一条记录
Definition: heap_record_scanner.cpp:84
DiskBufferPool * disk_buffer_pool_
当前访问的文件
Definition: heap_record_scanner.h:68
RC close_scan() override
关闭一个文件扫描,释放相应的资源
Definition: heap_record_scanner.cpp:120
RecordPageHandler * record_page_handler_
处理文件某页面的记录
Definition: heap_record_scanner.h:75
ConditionFilter * condition_filter_
过滤record
Definition: heap_record_scanner.h:74
RC next(Record &record) override
获取下一条记录
Definition: heap_record_scanner.cpp:138
Record next_record_
获取的记录放在这里缓存起来
Definition: heap_record_scanner.h:77
Table * table_
当前遍历的是哪张表。这个字段仅供事务函数使用,如果设计合适,可以去掉
Definition: heap_record_scanner.h:66
ReadWriteMode rw_mode_
遍历出来的数据,是否可能对它做修改
Definition: heap_record_scanner.h:71
BufferPoolIterator bp_iterator_
遍历buffer pool的所有页面
Definition: heap_record_scanner.h:73
Trx * trx_
当前是哪个事务在遍历
Definition: heap_record_scanner.h:69
RecordPageIterator record_page_iterator_
遍历某个页面上的所有record
Definition: heap_record_scanner.h:76
RC open_scan() override
打开一个文件扫描。
Definition: heap_record_scanner.cpp:16
对外提供服务的CLog模块
Definition: log_handler.h:40
负责处理一个页面中各种操作,比如插入记录、删除记录或者查找记录
Definition: record_manager.h:126
遍历一个页面中每条记录的iterator
Definition: record_manager.h:84
遍历某个表中所有记录
Definition: record_scanner.h:21
表示一个记录
Definition: record.h:101
Definition: table.h:42
事务接口
Definition: trx.h:141