miniob数据库——建表逻辑的源码解析

本文详细介绍了数据库中创建表的具体步骤,从解析SQL语句开始,经过多个函数调用,完成表元数据的创建与存储,最终形成可读写的表格。

创建表的逻辑

1.ExecuteStage::handle_request函数处理一个request请求,通过sql解析,发现这是一个创建表的sql语句,进入do_create_table函数

2.do_create_table函数

定义一个CreateTable变量,通过输入的sql语句得到创建表的名字、字段数量、字段类型数据。

获取sql语句的SessionEvent变量

获取当前的数据库类型(Db)

进入db->create_table函数,传入创建表的名字、字段数量、字段类型

3.db->create_table函数

参数检查,判断数据表名字是否重复

获取当前数据库存放的位置,构造出新创建表的元数据存储路径

建立一个新的table变量

调用table->create函数,传入元数据存储路径,数据表名字,数据库的路径,字段数和字段类型

函数结束之后,将当前表名加入到记录已打开数据表的映射中

4.table->create函数

(1)再次进行参数检查,检查数据表名字,检查字段数,字段类型

(2)调用

int fd = ::open(path, O_WRONLY | O_CREAT | O_EXCL | O_CLOEXEC, 0600);

打开元数据存储路径,

O_WRONLY 只写模式

O_CREAT 如果指定文件不存在,则创建这个文件

O_EXCL 如果要创建的文件已存在,则返回 -1,并且修改 errno 的值

O_CLOEXEC,当调用exec成功后,文件会自动关闭

0600表示创建的文件可读可写。

所以实际的意思是,根据传入的元数据存储位置,

### 关于 MiniOB 数据库的使用教程和下载地址 #### 下载地址 MiniOB 是一款开源的小型数据库系统,旨在帮助开发者理解数据库的核心工作原理。其官方项目托管在 GitCode 上,可以通过以下链接访问并下载源码: - **项目地址**: [https://gitcode.com/gh_mirrors/mi/miniob][^1] 通过该链接可以获取到完整的代码仓库,其中包括了项目的源文件以及相关文档。 #### 项目的目录结构及功能简介 为了更好地理解和使用 MiniOB 数据库,以下是该项目的主要目录及其作用概述[^2]: - `src`: 存放核心实现代码,包括存储引擎、查询解析器等模块。 - `include`: 定义头文件,提供接口声明供其他部分调用。 - `test`: 测试用例集合,用于验证系统的稳定性和功能性。 - `doc`: 文档说明区域,包含安装指导、设计思路等内容。 #### 基本安装与运行流程 对于初次使用者来说,按照下面的方法操作即可快速启动 MiniOB 数据库环境: 1. 克隆远程仓库至本地机器上; 2. 进入解压后的根目录执行构命令完成编译过程; 3. 启动服务端程序等待客户端连接请求到来; 具体每一步骤中的细节处理方式可以在随附的手册里找到更详尽描述。 ```bash # Clone repository from remote server git clone https://gitcode.com/gh_mirrors/mi/miniob # Navigate into project folder after cloning successfully cd miniob # Compile source files according to instructions provided within 'README.md' make all # Launch OBServer which listens on default port number(8080 unless specified otherwise). ./bin/server ``` 以上脚本展示了如何从零开始搭属于自己的 MiniOB 实验平台实例。
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

allwellright

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值