17#include "common/lang/bitmap.h"
18#include "common/lang/sstream.h"
19#include "storage/buffer/disk_buffer_pool.h"
20#include "storage/common/chunk.h"
21#include "storage/record/record.h"
22#include "storage/record/record_log.h"
23#include "common/types.h"
76 string to_string()
const;
112 bool is_valid()
const {
return record_page_handler_ !=
nullptr; }
116 PageNum page_num_ = BP_INVALID_PAGE_NUM;
128 RecordPageHandler(StorageFormat storage_format) : storage_format_(storage_format) {}
169 int col_num,
const char *col_idx_data);
203 virtual RC update_record(
const RID &rid,
const char *data) {
return RC::UNIMPLEMENTED; }
241 while (last_record_offset > BP_PAGE_DATA_SIZE) {
261 ReadWriteMode
rw_mode_ = ReadWriteMode::READ_WRITE;
264 StorageFormat storage_format_;
291 virtual RC update_record(
const RID &rid,
const char *data)
override;
347 char *get_field_data(SlotNum slot_num,
int col_id);
350 int get_field_len(
int col_id);
360 RecordFileHandler(StorageFormat storage_format) : storage_format_(storage_format){};
400 RC get_record(
const RID &rid,
Record &record);
402 RC visit_record(
const RID &rid, function<
bool(
Record &)> updater);
415 StorageFormat storage_format_;
448 ReadWriteMode
rw_mode_ = ReadWriteMode::READ_WRITE;
用于遍历BufferPool中的所有页面
Definition: disk_buffer_pool.h:167
遍历某个文件中所有记录,每次返回一个 Chunk
Definition: record_manager.h:425
RC next_chunk(Chunk &chunk)
每次调用获取一个页面中的所有记录。
Definition: record_manager.cpp:744
ReadWriteMode rw_mode_
遍历出来的数据,是否可能对它做修改
Definition: record_manager.h:448
Table * table_
当前遍历的是哪张表。
Definition: record_manager.h:444
DiskBufferPool * disk_buffer_pool_
当前访问的文件
Definition: record_manager.h:446
RC close_scan()
关闭一个文件扫描,释放相应的资源
Definition: record_manager.cpp:705
RecordPageHandler * record_page_handler_
处理文件某页面的记录
Definition: record_manager.h:451
BufferPoolIterator bp_iterator_
遍历buffer pool的所有页面
Definition: record_manager.h:450
A Chunk represents a set of columns.
Definition: chunk.h:23
Definition: condition_filter.h:31
BufferPool的实现
Definition: disk_buffer_pool.h:189
对外提供服务的CLog模块
Definition: log_handler.h:40
负责处理 PAX 存储格式的页面中各种操作
Definition: record_manager.h:314
virtual RC insert_record(const char *data, RID *rid) override
插入一条记录
Definition: record_manager.cpp:417
virtual RC get_chunk(Chunk &chunk) override
以 Chunk 格式获取整个页面中指定列的所有记录。
Definition: record_manager.cpp:454
virtual RC get_record(const RID &rid, Record &record) override
获取指定位置的记录数据
Definition: record_manager.cpp:447
virtual RC delete_record(const RID *rid) override
删除指定的记录
Definition: record_manager.cpp:423
管理整个文件中记录的增删改查
Definition: record_manager.h:358
RC delete_record(const RID *rid)
从指定文件中删除指定槽位的记录
Definition: record_manager.cpp:623
RC recover_insert_record(const char *data, int record_size, const RID &rid)
数据库恢复时,在指定文件指定位置插入数据
Definition: record_manager.cpp:608
RC init_free_pages()
初始化当前没有填满记录的页面,初始化free_pages_成员
Definition: record_manager.cpp:511
LogHandler * log_handler_
记录日志的处理器
Definition: record_manager.h:412
unordered_set< PageNum > free_pages_
没有填充满的页面集合
Definition: record_manager.h:413
RC insert_record(const char *data, int record_size, RID *rid)
插入一个新的记录到指定文件中,并返回该记录的标识符
Definition: record_manager.cpp:542
RC init(DiskBufferPool &buffer_pool, LogHandler &log_handler, TableMeta *table_meta)
初始化
Definition: record_manager.cpp:484
common::Mutex lock_
当编译时增加-DCONCURRENCY=ON 选项时,才会真正的支持并发
Definition: record_manager.h:414
void close()
关闭,做一些资源清理的工作
Definition: record_manager.cpp:501
Definition: record_log.h:82
负责处理一个页面中各种操作,比如插入记录、删除记录或者查找记录
Definition: record_manager.h:126
void fix_record_capacity()
Definition: record_manager.h:238
PageNum get_page_num() const
返回该记录页的页号
Definition: record_manager.cpp:407
RC recover_init(DiskBufferPool &buffer_pool, PageNum page_num)
数据库恢复时,与普通的运行场景有所不同,不做任何并发操作,也不需要加锁
Definition: record_manager.cpp:134
ReadWriteMode rw_mode_
当前的操作是否都是只读的
Definition: record_manager.h:261
RecordLogHandler log_handler_
当前操作的日志处理器
Definition: record_manager.h:259
virtual RC get_chunk(Chunk &chunk)
获取整个页面中指定列的所有记录。
Definition: record_manager.h:219
RC init(DiskBufferPool &buffer_pool, LogHandler &log_handler, PageNum page_num, ReadWriteMode mode)
初始化
Definition: record_manager.cpp:98
RC cleanup()
操作结束后做的清理工作,比如释放页面、解锁
Definition: record_manager.cpp:254
DiskBufferPool * disk_buffer_pool_
当前操作的buffer pool(文件)
Definition: record_manager.h:258
bool is_full() const
当前页面是否已经没有空闲位置插入新的记录
Definition: record_manager.cpp:415
virtual RC delete_record(const RID *rid)
删除指定的记录
Definition: record_manager.h:197
virtual RC get_record(const RID &rid, Record &record)
获取指定位置的记录数据
Definition: record_manager.h:211
virtual RC recover_insert_record(const char *data, const RID &rid)
数据库恢复时,在指定位置插入数据
Definition: record_manager.h:190
PageHeader * page_header_
当前页面上页面头
Definition: record_manager.h:262
RC init_empty_page(DiskBufferPool &buffer_pool, LogHandler &log_handler, PageNum page_num, int record_size, TableMeta *table_meta)
对一个新的页面做初始化,初始化关于该页面记录信息的页头PageHeader
Definition: record_manager.cpp:161
virtual RC insert_record(const char *data, RID *rid)
插入一条记录
Definition: record_manager.h:182
Frame * frame_
当前操作页面关联的frame(frame的更多概念可以参考buffer pool和frame)
Definition: record_manager.h:260
char * bitmap_
当前页面上record分配状态信息bitmap内存起始位置
Definition: record_manager.h:263
char * get_record_data(SlotNum slot_num)
获取指定槽位的记录数据
Definition: record_manager.h:252
遍历一个页面中每条记录的iterator
Definition: record_manager.h:84
RC next(Record &record)
读取下一个记录到record中包括RID和数据,并更新下一个记录位置next_slot_num_
Definition: record_manager.cpp:84
bool is_valid() const
Definition: record_manager.h:112
common::Bitmap bitmap_
bitmap 的相关信息可以参考 RecordPageHandler 的说明
Definition: record_manager.h:117
void init(RecordPageHandler *record_page_handler, SlotNum start_slot_num=0)
初始化一个迭代器
Definition: record_manager.cpp:74
SlotNum next_slot_num_
当前遍历到了哪一个slot
Definition: record_manager.h:118
bool has_next()
判断是否有下一个记录
Definition: record_manager.cpp:82
表示一个记录
Definition: record.h:101
负责处理行存页面中各种操作
Definition: record_manager.h:281
virtual RC recover_insert_record(const char *data, const RID &rid) override
数据库恢复时,在指定位置插入数据
Definition: record_manager.cpp:306
virtual RC delete_record(const RID *rid) override
删除指定的记录
Definition: record_manager.cpp:329
virtual RC insert_record(const char *data, RID *rid) override
插入一条记录
Definition: record_manager.cpp:269
virtual RC get_record(const RID &rid, Record &record) override
获取指定位置的记录数据
Definition: record_manager.cpp:388
事务接口
Definition: trx.h:141
标识一个记录的位置 一个记录是放在某个文件的某个页面的某个槽位。这里不记录文件信息,记录页面和槽位信息
Definition: record.h:35