19#include "storage/buffer/disk_buffer_pool.h"
20#include "storage/trx/latch_memo.h"
21#include "storage/record/record.h"
22#include "common/lang/bitmap.h"
105 bool is_valid()
const {
return record_page_handler_ !=
nullptr; }
109 PageNum page_num_ = BP_INVALID_PAGE_NUM;
212 while(last_record_offset > BP_PAGE_DATA_SIZE) {
用于遍历BufferPool中的所有页面
Definition: disk_buffer_pool.h:173
Definition: condition_filter.h:31
BufferPool的实现
Definition: disk_buffer_pool.h:193
管理整个文件中记录的增删改查
Definition: record_manager.h:245
RC init(DiskBufferPool *buffer_pool)
初始化
Definition: record_manager.cpp:296
RC delete_record(const RID *rid)
从指定文件中删除指定槽位的记录
Definition: record_manager.cpp:430
RC get_record(RecordPageHandler &page_handler, const RID *rid, bool readonly, Record *rec)
获取指定文件中标识符为rid的记录内容到rec指向的记录结构中
Definition: record_manager.cpp:456
RC recover_insert_record(const char *data, int record_size, const RID &rid)
数据库恢复时,在指定文件指定位置插入数据
Definition: record_manager.cpp:415
RC init_free_pages()
初始化当前没有填满记录的页面,初始化free_pages_成员
Definition: record_manager.cpp:319
RC insert_record(const char *data, int record_size, RID *rid)
插入一个新的记录到指定文件中,并返回该记录的标识符
Definition: record_manager.cpp:350
std::unordered_set< PageNum > free_pages_
没有填充满的页面集合
Definition: record_manager.h:316
RC visit_record(const RID &rid, bool readonly, std::function< void(Record &)> visitor)
与get_record类似,访问某个记录,并提供回调函数来操作相应的记录
Definition: record_manager.cpp:472
common::Mutex lock_
当编译时增加-DCONCURRENCY=ON 选项时,才会真正的支持并发
Definition: record_manager.h:317
void close()
关闭,做一些资源清理的工作
Definition: record_manager.cpp:311
遍历某个文件中所有记录
Definition: record_manager.h:326
DiskBufferPool * disk_buffer_pool_
当前访问的文件
Definition: record_manager.h:376
RC open_scan(Table *table, DiskBufferPool &buffer_pool, Trx *trx, bool readonly, ConditionFilter *condition_filter)
打开一个文件扫描。
Definition: record_manager.cpp:497
BufferPoolIterator bp_iterator_
遍历buffer pool的所有页面
Definition: record_manager.h:380
RC close_scan()
关闭一个文件扫描,释放相应的资源
Definition: record_manager.cpp:605
RC next(Record &record)
获取下一条记录
Definition: record_manager.cpp:622
RecordPageIterator record_page_iterator_
遍历某个页面上的所有record
Definition: record_manager.h:383
RC fetch_next_record_in_page()
获取一个页面内的下一条记录
Definition: record_manager.cpp:570
Record next_record_
获取的记录放在这里缓存起来
Definition: record_manager.h:384
RC fetch_next_record()
获取该文件中的下一条记录
Definition: record_manager.cpp:527
bool readonly_
遍历出来的数据,是否可能对它做修改
Definition: record_manager.h:378
Table * table_
当前遍历的是哪张表。这个字段仅供事务函数使用,如果设计合适,可以去掉
Definition: record_manager.h:375
RecordPageHandler record_page_handler_
处理文件某页面的记录
Definition: record_manager.h:382
ConditionFilter * condition_filter_
过滤record
Definition: record_manager.h:381
Trx * trx_
当前是哪个事务在遍历
Definition: record_manager.h:377
bool has_next()
判断是否还有数据
Definition: record_manager.cpp:620
负责处理一个页面中各种操作,比如插入记录、删除记录或者查找记录
Definition: record_manager.h:125
void fix_record_capacity()
Definition: record_manager.h:209
PageNum get_page_num() const
返回该记录页的页号
Definition: record_manager.cpp:282
RC recover_init(DiskBufferPool &buffer_pool, PageNum page_num)
数据库恢复时,与普通的运行场景有所不同,不做任何并发操作,也不需要加锁
Definition: record_manager.cpp:115
RC init(DiskBufferPool &buffer_pool, PageNum page_num, bool readonly)
初始化
Definition: record_manager.cpp:82
RC recover_insert_record(const char *data, const RID &rid)
数据库恢复时,在指定位置插入数据
Definition: record_manager.cpp:215
RC cleanup()
操作结束后做的清理工作,比如释放页面、解锁
Definition: record_manager.cpp:170
DiskBufferPool * disk_buffer_pool_
当前操作的buffer pool(文件)
Definition: record_manager.h:229
RC get_record(const RID *rid, Record *rec)
获取指定位置的记录数据
Definition: record_manager.cpp:264
bool is_full() const
当前页面是否已经没有空闲位置插入新的记录
Definition: record_manager.cpp:290
RC insert_record(const char *data, RID *rid)
插入一条记录
Definition: record_manager.cpp:185
PageHeader * page_header_
当前页面上页面头
Definition: record_manager.h:232
RC delete_record(const RID *rid)
删除指定的记录
Definition: record_manager.cpp:238
bool readonly_
当前的操作是否都是只读的
Definition: record_manager.h:231
RC init_empty_page(DiskBufferPool &buffer_pool, PageNum page_num, int record_size)
对一个新的页面做初始化,初始化关于该页面记录信息的页头PageHeader
Definition: record_manager.cpp:142
Frame * frame_
当前操作页面关联的frame(frame的更多概念可以参考buffer pool和frame)
Definition: record_manager.h:230
char * bitmap_
当前页面上record分配状态信息bitmap内存起始位置
Definition: record_manager.h:233
char * get_record_data(SlotNum slot_num)
获取指定槽位的记录数据
Definition: record_manager.h:223
遍历一个页面中每条记录的iterator
Definition: record_manager.h:77
RC next(Record &record)
读取下一个记录到record中包括RID和数据,并更新下一个记录位置next_slot_num_
Definition: record_manager.cpp:67
void init(RecordPageHandler &record_page_handler, SlotNum start_slot_num=0)
初始化一个迭代器
Definition: record_manager.cpp:57
bool is_valid() const
Definition: record_manager.h:105
common::Bitmap bitmap_
bitmap 的相关信息可以参考 RecordPageHandler 的说明
Definition: record_manager.h:110
SlotNum next_slot_num_
当前遍历到了哪一个slot
Definition: record_manager.h:111
bool has_next()
判断是否有下一个记录
Definition: record_manager.cpp:65
表示一个记录 当前的记录都是连续存放的空间(内存或磁盘上)。 为了提高访问的效率,record通常直接记录指向页面上的内存,但是需要保证访问这种数据时,拿着锁资源。 为了方便,也提供了复制内存的方法。可...
Definition: record.h:92
事务接口
Definition: trx.h:142
标识一个记录的位置 一个记录是放在某个文件的某个页面的某个槽位。这里不记录文件信息,记录页面和槽位信息
Definition: record.h:35