MiniOB 1
MiniOB is one mini database, helping developers to learn how database works.
载入中...
搜索中...
未找到
table.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//
12// Created by Meiyi & Wangyunlai on 2021/5/12.
13//
14
15#pragma once
16
17#include "storage/table/table_meta.h"
18#include "storage/table/table_engine.h"
19#include "common/types.h"
20#include "common/lang/span.h"
21#include "common/lang/functional.h"
22
23struct RID;
24class Record;
25class DiskBufferPool;
27class RecordScanner;
29class ConditionFilter;
31class Index;
32class IndexScanner;
33class RecordDeleter;
34class Trx;
35class Db;
36
41class Table
42{
43public:
44 Table() = default;
45 ~Table();
46
47 // TODO: use TableEngine replace Table
48 friend class TableEngine;
49 friend class HeapTableEngine;
50
59 RC create(Db *db, int32_t table_id, const char *path, const char *name, const char *base_dir,
60 span<const AttrInfoSqlNode> attributes, StorageFormat storage_format, StorageEngine storage_engine);
61
67 RC open(Db *db, const char *meta_file, const char *base_dir);
68
76 RC make_record(int value_num, const Value *values, Record &record);
77
83 RC insert_record(Record &record);
84 RC delete_record(const Record &record);
85 RC get_record(const RID &rid, Record &record);
86
87 // TODO refactor
88 RC create_index(Trx *trx, const FieldMeta *field_meta, const char *index_name);
89
90 RC get_record_scanner(RecordScanner *&scanner, Trx *trx, ReadWriteMode mode);
91
92 RC get_chunk_scanner(ChunkFileScanner &scanner, Trx *trx, ReadWriteMode mode);
93
101 RC visit_record(const RID &rid, function<bool(Record &)> visitor);
102
103public:
104 int32_t table_id() const { return table_meta_.table_id(); }
105 const char *name() const;
106
107 Db *db() const { return db_; }
108
109 const TableMeta &table_meta() const;
110
111 RC sync();
112
113private:
114 RC set_value_to_record(char *record_data, const Value &value, const FieldMeta *field);
115
116private:
117 // RC init_record_handler(const char *base_dir);
118
119public:
120 Index *find_index(const char *index_name) const;
121 Index *find_index_by_field(const char *field_name) const;
122
123private:
124 Db *db_ = nullptr;
125 TableMeta table_meta_;
126 // DiskBufferPool *data_buffer_pool_ = nullptr; /// 数据文件关联的buffer pool
127 // RecordFileHandler *record_handler_ = nullptr; /// 记录操作
128 // vector<Index *> indexes_;
129 unique_ptr<TableEngine> engine_ = nullptr;
130};
遍历某个文件中所有记录,每次返回一个 Chunk
Definition: record_manager.h:425
Definition: condition_filter.h:31
一个DB实例负责管理一批表
Definition: db.h:46
Definition: condition_filter.h:44
BufferPool的实现
Definition: disk_buffer_pool.h:189
字段元数据
Definition: field_meta.h:30
table engine
Definition: heap_table_engine.h:23
索引扫描器
Definition: index.h:104
索引基类
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
RC visit_record(const RID &rid, function< bool(Record &)> visitor)
可以在页面锁保护的情况下访问记录
Definition: table.cpp:183
RC make_record(int value_num, const Value *values, Record &record)
根据给定的字段生成一个记录/行
Definition: table.cpp:197
RC create(Db *db, int32_t table_id, const char *path, const char *name, const char *base_dir, span< const AttrInfoSqlNode > attributes, StorageFormat storage_format, StorageEngine storage_engine)
Definition: table.cpp:42
RC insert_record(Record &record)
在当前的表中插入一条记录
Definition: table.cpp:178
RC open(Db *db, const char *meta_file, const char *base_dir)
Definition: table.cpp:131
事务接口
Definition: trx.h:141
属性的值
Definition: value.h:30
标识一个记录的位置 一个记录是放在某个文件的某个页面的某个槽位。这里不记录文件信息,记录页面和槽位信息
Definition: record.h:35