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 "storage/record/lob_handler.h"
24#include "common/types.h"
77 string to_string()
const;
113 bool is_valid()
const {
return record_page_handler_ !=
nullptr; }
117 PageNum page_num_ = BP_INVALID_PAGE_NUM;
129 RecordPageHandler(StorageFormat storage_format) : storage_format_(storage_format) {}
171 int col_num,
const char *col_idx_data,
LobFileHandler *lob_handler =
nullptr);
186 virtual RC insert_chunk(
const Chunk &chunk,
int start_row,
int &insert_rows) {
return RC::UNIMPLEMENTED; }
207 virtual RC update_record(
const RID &rid,
const char *data) {
return RC::UNIMPLEMENTED; }
245 while (last_record_offset > BP_PAGE_DATA_SIZE) {
265 ReadWriteMode
rw_mode_ = ReadWriteMode::READ_WRITE;
268 StorageFormat storage_format_;
296 virtual RC update_record(
const RID &rid,
const char *data)
override;
333 virtual RC insert_chunk(
const Chunk &chunk,
int start_row,
int &insert_rows)
override;
355 char *get_field_data(SlotNum slot_num,
int col_id);
358 int get_field_len(
int col_id);
368 RecordFileHandler(StorageFormat storage_format) : storage_format_(storage_format){};
399 RC insert_chunk(
const Chunk &chunk,
int record_size);
410 RC get_record(
const RID &rid,
Record &record);
412 RC visit_record(
const RID &rid, function<
bool(
Record &)> updater);
425 StorageFormat storage_format_;
459 ReadWriteMode
rw_mode_ = ReadWriteMode::READ_WRITE;
用于遍历BufferPool中的所有页面
Definition: disk_buffer_pool.h:168
遍历某个文件中所有记录,每次返回一个 Chunk
Definition: record_manager.h:436
RC next_chunk(Chunk &chunk)
每次调用获取一个页面中的所有记录。
Definition: record_manager.cpp:776
ReadWriteMode rw_mode_
遍历出来的数据,是否可能对它做修改
Definition: record_manager.h:459
Table * table_
当前遍历的是哪张表。
Definition: record_manager.h:455
DiskBufferPool * disk_buffer_pool_
当前访问的文件
Definition: record_manager.h:457
RC close_scan()
关闭一个文件扫描,释放相应的资源
Definition: record_manager.cpp:737
RecordPageHandler * record_page_handler_
处理文件某页面的记录
Definition: record_manager.h:462
BufferPoolIterator bp_iterator_
遍历buffer pool的所有页面
Definition: record_manager.h:461
A Chunk represents a set of columns.
Definition: chunk.h:23
Definition: condition_filter.h:31
BufferPool的实现
Definition: disk_buffer_pool.h:190
管理LOB文件中的 LOB 对象
Definition: lob_handler.h:23
对外提供服务的CLog模块
Definition: log_handler.h:40
负责处理 PAX 存储格式的页面中各种操作
Definition: record_manager.h:319
virtual RC insert_record(const char *data, RID *rid) override
插入一条记录
Definition: record_manager.cpp:424
virtual RC get_chunk(Chunk &chunk) override
以 Chunk 格式获取整个页面中指定列的所有记录。
Definition: record_manager.cpp:475
virtual RC get_record(const RID &rid, Record &record) override
获取指定位置的记录数据
Definition: record_manager.cpp:464
virtual RC delete_record(const RID *rid) override
删除指定的记录
Definition: record_manager.cpp:440
管理整个文件中记录的增删改查
Definition: record_manager.h:366
RC delete_record(const RID *rid)
从指定文件中删除指定槽位的记录
Definition: record_manager.cpp:655
RC recover_insert_record(const char *data, int record_size, const RID &rid)
数据库恢复时,在指定文件指定位置插入数据
Definition: record_manager.cpp:640
RC init_free_pages()
初始化当前没有填满记录的页面,初始化free_pages_成员
Definition: record_manager.cpp:537
LogHandler * log_handler_
记录日志的处理器
Definition: record_manager.h:422
unordered_set< PageNum > free_pages_
没有填充满的页面集合
Definition: record_manager.h:423
RC insert_record(const char *data, int record_size, RID *rid)
插入一个新的记录到指定文件中,并返回该记录的标识符
Definition: record_manager.cpp:568
RC init(DiskBufferPool &buffer_pool, LogHandler &log_handler, TableMeta *table_meta, LobFileHandler *lob_handler)
初始化
Definition: record_manager.cpp:508
common::Mutex lock_
当编译时增加-DCONCURRENCY=ON 选项时,才会真正的支持并发
Definition: record_manager.h:424
void close()
关闭,做一些资源清理的工作
Definition: record_manager.cpp:527
Definition: record_log.h:82
负责处理一个页面中各种操作,比如插入记录、删除记录或者查找记录
Definition: record_manager.h:127
void fix_record_capacity()
Definition: record_manager.h:242
PageNum get_page_num() const
返回该记录页的页号
Definition: record_manager.cpp:414
RC recover_init(DiskBufferPool &buffer_pool, PageNum page_num)
数据库恢复时,与普通的运行场景有所不同,不做任何并发操作,也不需要加锁
Definition: record_manager.cpp:136
ReadWriteMode rw_mode_
当前的操作是否都是只读的
Definition: record_manager.h:265
RecordLogHandler log_handler_
当前操作的日志处理器
Definition: record_manager.h:263
virtual RC get_chunk(Chunk &chunk)
获取整个页面中指定列的所有记录。
Definition: record_manager.h:223
RC init(DiskBufferPool &buffer_pool, LogHandler &log_handler, PageNum page_num, ReadWriteMode mode, LobFileHandler *lob_handler=nullptr)
初始化
Definition: record_manager.cpp:98
RC cleanup()
操作结束后做的清理工作,比如释放页面、解锁
Definition: record_manager.cpp:260
DiskBufferPool * disk_buffer_pool_
当前操作的buffer pool(文件)
Definition: record_manager.h:262
bool is_full() const
当前页面是否已经没有空闲位置插入新的记录
Definition: record_manager.cpp:422
virtual RC delete_record(const RID *rid)
删除指定的记录
Definition: record_manager.h:201
virtual RC get_record(const RID &rid, Record &record)
获取指定位置的记录数据
Definition: record_manager.h:215
virtual RC recover_insert_record(const char *data, const RID &rid)
数据库恢复时,在指定位置插入数据
Definition: record_manager.h:194
PageHeader * page_header_
当前页面上页面头
Definition: record_manager.h:266
virtual RC insert_record(const char *data, RID *rid)
插入一条记录
Definition: record_manager.h:184
Frame * frame_
当前操作页面关联的frame(frame的更多概念可以参考buffer pool和frame)
Definition: record_manager.h:264
RC init_empty_page(DiskBufferPool &buffer_pool, LogHandler &log_handler, PageNum page_num, int record_size, TableMeta *table_meta, LobFileHandler *lob_handler=nullptr)
对一个新的页面做初始化,初始化关于该页面记录信息的页头PageHeader
Definition: record_manager.cpp:163
char * bitmap_
当前页面上record分配状态信息bitmap内存起始位置
Definition: record_manager.h:267
char * get_record_data(SlotNum slot_num)
获取指定槽位的记录数据
Definition: record_manager.h:256
遍历一个页面中每条记录的iterator
Definition: record_manager.h:85
RC next(Record &record)
读取下一个记录到record中包括RID和数据,并更新下一个记录位置next_slot_num_
Definition: record_manager.cpp:84
bool is_valid() const
Definition: record_manager.h:113
common::Bitmap bitmap_
bitmap 的相关信息可以参考 RecordPageHandler 的说明
Definition: record_manager.h:118
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:119
bool has_next()
判断是否有下一个记录
Definition: record_manager.cpp:82
表示一个记录
Definition: record.h:101
负责处理行存页面中各种操作
Definition: record_manager.h:286
virtual RC recover_insert_record(const char *data, const RID &rid) override
数据库恢复时,在指定位置插入数据
Definition: record_manager.cpp:313
virtual RC delete_record(const RID *rid) override
删除指定的记录
Definition: record_manager.cpp:336
virtual RC insert_record(const char *data, RID *rid) override
插入一条记录
Definition: record_manager.cpp:275
virtual RC get_record(const RID &rid, Record &record) override
获取指定位置的记录数据
Definition: record_manager.cpp:395
事务接口
Definition: trx.h:141
标识一个记录的位置 一个记录是放在某个文件的某个页面的某个槽位。这里不记录文件信息,记录页面和槽位信息
Definition: record.h:35