跳转至

第二题

2. 2025题目二:查询执行

前置题目:存储管理

题目种类:基础功能

推荐知识点:逻辑查询优化、查询解析、基本算子实现、查询执行框架、元数据存储组织

代码框架:https://gitlab.eduxiji.net/csc1/csc-db/db2025/-/tree/main/rmdb

题目描述:

在实现题目一功能的基础上增加查询执行模块,使得系统支持通过测试需要的元数据管理、DDL语句、DQL语句、DML语句。

提示:

l 本题目提供了空缺的样例代码,参赛队伍可以选择进行补全,也可以选择自行构建。如果选择补全空缺的样例代码,需要实现“元数据管理与DDL语句”和“DQL语句和DML语句”。

l 本题目通过sql进行测试,分为五个测试点,它们依次是“尝试建表”、“单表插入与条件查询”、“单表更新与条件查询”、“单表删除与条件查询”、“连接查询”。

1、元数据管理与DDL语句

本任务要求参赛队伍对数据库的元数据进行管理,并实现基本的DDL语句,包括create table和drop table两种语句。大赛提供的框架中,与元数据管理和DDL语句相关的代码文件位于src/system文件夹下,代码框架中提供了create table语句的实现方式。

2、DQL语句和DML语句

DML语句要求实现基本的增删改,即insert、delete、update语句。DQL语句要求实现select语句。在完成本任务之前,参赛队伍需要首先阅读项目结构文档中查询解析、查询优化、查询执行的相关说明,以及代码框架中src/analyze、src/optimizer、src/execution文件夹下的代码文件,参赛队伍需要实现代码框架中未提供的功能,包括语义检查、查询执行计划的生成、执行算子等。

本题目通过SQL来进行测试,因此参赛队伍可以对代码进行重构。

测试示例:

测试点1: 尝试建表

测试示例:

create table t1(id int,name char(4));

show tables;

create table t2(id int);

show tables;

drop table t1;

show tables;

drop table t2;

show tables;

期待输出:

| Tables |

| t1 |

| Tables |

| t1 |

| t2 |

| Tables |

| t2 |

| Tables |

测试点2: 单表插入与条件查询

测试示例:

create table grade (name char(20),id int,score float);

insert into grade values ('Data Structure', 1, 90.5);

insert into grade values ('Data Structure', 2, 95.0);

insert into grade values ('Calculus', 2, 92.0);

insert into grade values ('Calculus', 1, 88.5);

select * from grade;

select score,name,id from grade where score > 90;

select id from grade where name = 'Data Structure';

select name from grade where id = 2 and score > 90;

期待输出:

| name | id | score |

| Data Structure | 1 | 90.500000 |

| Data Structure | 2 | 95.000000 |

| Calculus | 2 | 92.000000 |

| Calculus | 1 | 88.500000 |

| score | name | id |

| 90.500000 | Data Structure | 1 |

| 95.000000 | Data Structure | 2 |

| 92.000000 | Calculus | 2 |

| id |

| 1 |

| 2 |

| name |

| Data Structure |

| Calculus |

测试点3:单表更新与条件查询

测试示例:

create table grade (name char(20),id int,score float);

insert into grade values ('Data Structure', 1, 90.5);

insert into grade values ('Data Structure', 2, 95.0);

insert into grade values ('Calculus', 2, 92.0);

insert into grade values ('Calculus', 1, 88.5);

select * from grade;

update grade set score = 90 where name = 'Calculus' ;

select * from grade;

update grade set name = 'Error name' where name > 'A';

select * from grade;

update grade set name = 'Error' ,id = -1,score = 0 where name = 'Error name' and score >= 90;

select * from grade;

期待输出:

| name | id | score |

| Data Structure | 1 | 90.500000 |

| Data Structure | 2 | 95.000000 |

| Calculus | 2 | 92.000000 |

| Calculus | 1 | 88.500000 |

| name | id | score |

| Data Structure | 1 | 90.500000 |

| Data Structure | 2 | 95.000000 |

| Calculus | 2 | 90.000000 |

| Calculus | 1 | 90.00000 |

| name | id | score |

| Error name | 1 | 90.500000 |

| Error name | 2 | 95.000000 |

| Error name | 2 | 90.000000 |

| Error name | 1 | 90.000000 |

| name | id | score |

| Error | -1 | 0.000000 |

| Error | -1 | 0.000000 |

| Error | -1 | 0.000000 |

| Error | -1 | 0.000000 |

测试点4:单表删除与条件查询

测试示例:

create table grade (name char(20),id int,score float);

insert into grade values ('Data Structure', 1, 90.5);

select * from grade;

delete from grade where score > 90;

select * from grade;

期待输出:

| name | id | score|

| Data Structure | 1 | 90.500000 |

| name | id | score|

测试点5:连接查询

测试示例:

create table t ( id int , t_name char (3));

create table d (d_name char(5),id int);

insert into t values (1,'aaa');

insert into t values (2,'baa');

insert into t values (3,'bba');

insert into d values ('12345',1);

insert into d values ('23456',2);

select * from t, d;

select t.id,t_name,d_name from t,d where t.id = d.id;

select t.id,t_name,d_name from t join d where t.id = d.id;

期待输出:

| id | t_name | d_name | id |

| 1 | aaa | 23456 | 2 |

| 1 | aaa | 12345 | 1 |

| 2 | baa | 23456 | 2 |

| 2 | baa | 12345 | 1 |

| 3 | bba | 23456 | 2 |

| 3 | bba | 12345 | 1 |

| id | t_name | d_name |

| 1 | aaa | 12345 |

| 2 | baa | 23456 |

| id | t_name | d_name |

| 1 | aaa | 12345 |

| 2 | baa | 23456 |

测试输出要求

本题目的输出要求写入数据库文件夹下的output.txt文件中,例如测试数据库名称为execution_test_db,则在测试时使用./bin/rmdb execution_test_db命令来启动服务端,对应输出应写入buid/execution_test_db/output.txt文件中。

GitLab提交帮助

草稿箱

Text Only
1
https://git