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 "storage/common/chunk.h"
20#include "storage/record/lob_handler.h"
21#include "common/types.h"
22#include "common/lang/span.h"
23#include "common/lang/functional.h"
24
25struct RID;
26class Record;
27class DiskBufferPool;
29class RecordScanner;
31class ConditionFilter;
33class Index;
34class IndexScanner;
35class RecordDeleter;
36class Trx;
37class Db;
38
43class Table
44{
45public:
46 Table() = default;
47 ~Table();
48
49 // TODO: use TableEngine replace Table
50 friend class TableEngine;
51 friend class HeapTableEngine;
52
61 RC create(Db *db, int32_t table_id, const char *path, const char *name, const char *base_dir,
62 span<const AttrInfoSqlNode> attributes, const vector<string> &primary_keys, StorageFormat storage_format,
63 StorageEngine storage_engine);
64
70 RC open(Db *db, const char *meta_file, const char *base_dir);
71
79 RC make_record(int value_num, const Value *values, Record &record);
80
86 RC insert_record(Record &record);
87
88 RC insert_chunk(const Chunk &chunk);
89 RC delete_record(const Record &record);
90
91 RC insert_record_with_trx(Record &record, Trx *trx);
92 RC delete_record_with_trx(const Record &record, Trx *trx);
93 RC update_record_with_trx(const Record &old_record, const Record &new_record, Trx *trx);
94 RC get_record(const RID &rid, Record &record);
95
96 // TODO refactor
97 RC create_index(Trx *trx, const FieldMeta *field_meta, const char *index_name);
98
99 RC get_record_scanner(RecordScanner *&scanner, Trx *trx, ReadWriteMode mode);
100
101 RC get_chunk_scanner(ChunkFileScanner &scanner, Trx *trx, ReadWriteMode mode);
102
110 RC visit_record(const RID &rid, function<bool(Record &)> visitor);
111
112public:
113 int32_t table_id() const { return table_meta_.table_id(); }
114 const char *name() const;
115
116 Db *db() const { return db_; }
117
118 const TableMeta &table_meta() const;
119
120 LobFileHandler *lob_handler() const { return lob_handler_; }
121
122 RC sync();
123
124private:
125 RC set_value_to_record(char *record_data, const Value &value, const FieldMeta *field);
126
127private:
128 // RC init_record_handler(const char *base_dir);
129
130public:
131 Index *find_index(const char *index_name) const;
132 Index *find_index_by_field(const char *field_name) const;
133
134private:
135 Db *db_ = nullptr;
136 TableMeta table_meta_;
137 // DiskBufferPool *data_buffer_pool_ = nullptr; /// 数据文件关联的buffer pool
138 // RecordFileHandler *record_handler_ = nullptr; /// 记录操作
139 // vector<Index *> indexes_;
140 unique_ptr<TableEngine> engine_ = nullptr;
141 LobFileHandler *lob_handler_ = nullptr;
142};
遍历某个文件中所有记录,每次返回一个 Chunk
Definition: record_manager.h:436
A Chunk represents a set of columns.
Definition: chunk.h:23
Definition: condition_filter.h:31
一个DB实例负责管理一批表
Definition: db.h:46
Definition: condition_filter.h:44
BufferPool的实现
Definition: disk_buffer_pool.h:190
字段元数据
Definition: field_meta.h:30
table engine
Definition: heap_table_engine.h:23
索引扫描器
Definition: index.h:104
索引基类
Definition: index.h:38
管理LOB文件中的 LOB 对象
Definition: lob_handler.h:23
管理整个文件中记录的增删改查
Definition: record_manager.h:366
遍历某个表中所有记录
Definition: record_scanner.h:21
表示一个记录
Definition: record.h:101
table engine
Definition: table_engine.h:36
表元数据
Definition: table_meta.h:29
Definition: table.h:44
RC create(Db *db, int32_t table_id, const char *path, const char *name, const char *base_dir, span< const AttrInfoSqlNode > attributes, const vector< string > &primary_keys, StorageFormat storage_format, StorageEngine storage_engine)
Definition: table.cpp:46
RC visit_record(const RID &rid, function< bool(Record &)> visitor)
可以在页面锁保护的情况下访问记录
Definition: table.cpp:185
RC make_record(int value_num, const Value *values, Record &record)
根据给定的字段生成一个记录/行
Definition: table.cpp:213
RC insert_record(Record &record)
在当前的表中插入一条记录
Definition: table.cpp:175
RC open(Db *db, const char *meta_file, const char *base_dir)
Definition: table.cpp:128
事务接口
Definition: trx.h:141
属性的值
Definition: value.h:31
标识一个记录的位置 一个记录是放在某个文件的某个页面的某个槽位。这里不记录文件信息,记录页面和槽位信息
Definition: record.h:35