MiniOB 1
MiniOB is one mini database, helping developers to learn how database works.
载入中...
搜索中...
未找到
heap_table_engine.h
1/* Copyright (c) 2021 Xie Meiyi(xiemeiyi@hust.edu.cn) and 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/table/table_engine.h"
14#include "storage/index/index.h"
15#include "storage/record/record_manager.h"
16#include "storage/db/db.h"
17
18class Table;
23{
24public:
25 friend class Table;
26 HeapTableEngine(TableMeta *table_meta, Db *db, Table *table) : TableEngine(table_meta), db_(db), table_(table) {}
27 ~HeapTableEngine() override;
28
29 RC insert_record(Record &record) override;
30 RC delete_record(const Record &record) override;
31 RC insert_record_with_trx(Record &record, Trx *trx) override { return RC::UNSUPPORTED; }
32 RC delete_record_with_trx(const Record &record, Trx *trx) override { return RC::UNSUPPORTED; }
33 RC update_record_with_trx(const Record &old_record, const Record &new_record, Trx *trx) override
34 {
35 return RC::UNSUPPORTED;
36 }
37 RC get_record(const RID &rid, Record &record) override;
38
39 RC create_index(Trx *trx, const FieldMeta *field_meta, const char *index_name) override;
40 RC get_record_scanner(RecordScanner *&scanner, Trx *trx, ReadWriteMode mode) override;
41 RC get_chunk_scanner(ChunkFileScanner &scanner, Trx *trx, ReadWriteMode mode) override;
42 RC visit_record(const RID &rid, function<bool(Record &)> visitor) override;
43 RC sync() override;
44
45 Index *find_index(const char *index_name) const override;
46 Index *find_index_by_field(const char *field_name) const override;
47 RC open() override;
48 // init_record_handler
49 RC init() override;
50
51private:
52 RC insert_entry_of_indexes(const char *record, const RID &rid);
53 RC delete_entry_of_indexes(const char *record, const RID &rid, bool error_on_not_exists);
54
55private:
56 DiskBufferPool *data_buffer_pool_ = nullptr;
58 vector<Index *> indexes_;
59 Db *db_;
60 Table *table_;
61};
遍历某个文件中所有记录,每次返回一个 Chunk
Definition: record_manager.h:425
一个DB实例负责管理一批表
Definition: db.h:46
BufferPool的实现
Definition: disk_buffer_pool.h:189
字段元数据
Definition: field_meta.h:30
table engine
Definition: heap_table_engine.h:23
RecordFileHandler * record_handler_
数据文件关联的buffer pool
Definition: heap_table_engine.h:57
RC create_index(Trx *trx, const FieldMeta *field_meta, const char *index_name) override
Definition: heap_table_engine.cpp:112
vector< Index * > indexes_
记录操作
Definition: heap_table_engine.h:58
索引基类
Definition: index.h:38
管理整个文件中记录的增删改查
Definition: record_manager.h:358
遍历某个表中所有记录
Definition: record_scanner.h:21
表示一个记录
Definition: record.h:101
table engine
Definition: table_engine.h:35
表元数据
Definition: table_meta.h:29
Definition: table.h:42
事务接口
Definition: trx.h:141
标识一个记录的位置 一个记录是放在某个文件的某个页面的某个槽位。这里不记录文件信息,记录页面和槽位信息
Definition: record.h:35