# your_sql **Repository Path**: towards-the-ocean/your_sql ## Basic Information - **Project Name**: your_sql - **Description**: 基于c++的小型数据库系统实现 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-09-10 - **Last Updated**: 2025-09-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # SQL编译器 基于C++17标准实现的SQL编译器,支持词法分析、语法分析、语义分析和执行计划生成。 ## 🖥️ 跨平台支持 - ✅ Linux (Ubuntu/CentOS/etc.) - ✅ Windows 10/11 (MSVC/MinGW) - ✅ macOS (clang) ## 🚀 快速开始 ### Linux/macOS ```bash ./build.sh ./build/sql_compiler tests/simple_test.sql ``` ### Windows ```cmd build_windows.bat .\build\Release\sql_compiler.exe tests\simple_test.sql ``` ## 功能特性 ### 支持的SQL语句 - **CREATE TABLE**: 创建表结构 - **INSERT**: 插入数据 - **SELECT**: 查询数据(支持WHERE条件) - **DELETE**: 删除数据(支持WHERE条件) ### 支持的数据类型 - **INT**: 整型 - **VARCHAR**: 可变长字符串 ### 编译器组件 #### 1. 词法分析器 (Lexer) - 识别SQL关键字、标识符、常量、运算符、分隔符 - 输出Token流:`[种别码,词素值,行号,列号]` - 错误处理:检测无效字符和未闭合字符串 #### 2. 语法分析器 (Parser) - 基于递归下降方法构建抽象语法树(AST) - 支持四类基本SQL语句的语法分析 - 错误处理:提供语法错误位置和期望符号 #### 3. 语义分析器 (Semantic Analyzer) - 表/列存在性检查 - 类型一致性检查 - 列数/列序检查 - 维护模式目录(Catalog) #### 4. 执行计划生成器 (Plan Generator) - 生成逻辑执行计划 - 支持算子:CreateTable、Insert、SeqScan、Filter、Project、Delete - 输出格式:树形结构和JSON ## 构建和运行 ### 系统要求 - C++17兼容的编译器(如GCC 7+、Clang 5+) - CMake 3.10+ ### 构建步骤 ```bash # 方法1:使用构建脚本 ./build.sh # 方法2:手动构建 mkdir build && cd build cmake .. make ``` ### 运行方式 ```bash # 1. 运行内置测试和交互模式 ./sql_compiler # 2. 编译指定的SQL文件 ./sql_compiler ../tests/test_correct.sql # 3. 交互模式 ./sql_compiler # 然后输入SQL语句,输入quit退出 ``` ## 测试用例 ### 正确的SQL语句 ```sql CREATE TABLE student(id INT, name VARCHAR(50), age INT); INSERT INTO student(id, name, age) VALUES (1, 'Alice', 20); SELECT id, name FROM student WHERE age > 18; DELETE FROM student WHERE id = 1; ``` ### 错误测试 - 缺分号:`CREATE TABLE student(id INT, name VARCHAR, age INT)` - 列名错误:`SELECT nonexistent FROM student;` - 类型不匹配:`INSERT INTO student VALUES (1, 42, 20);` - 值个数不匹配:`INSERT INTO student(id, name, age) VALUES (1, 'Alice');` - 未闭合字符串:`SELECT * FROM 'unclosed string;` ## 输出示例 ### 词法分析结果 ``` === 词法分析结果 (Token流) === 种别码 词素值 行号 列号 -------------------------------------------------- CREATE CREATE 1 1 TABLE TABLE 1 8 IDENTIFIER student 1 14 LEFT_PAREN ( 1 21 ... ``` ### 语法分析结果 ``` === 语法分析结果 (AST) === CREATE TABLE student (id INT, name VARCHAR, age INT) ``` ### 语义分析结果 ``` === 语义分析结果 === 语义检查通过 ``` ### 执行计划 ``` === 执行计划 === 树形结构: CreateTable(table: student, columns: [id:INT, name:VARCHAR, age:INT]) JSON格式: {"type":"CreateTable","table":"student","columns":[{"name":"id","type":"INT"},{"name":"name","type":"VARCHAR","size":50},{"name":"age","type":"INT"}]} ``` ## 项目结构 ``` sql_compiler/ ├── CMakeLists.txt # CMake构建配置 ├── build.sh # 构建脚本 ├── README.md # 项目文档 ├── include/ # 头文件 │ ├── common.h # 公共定义 │ ├── ast.h # AST节点定义 │ ├── lexer.h # 词法分析器 │ ├── parser.h # 语法分析器 │ ├── semantic_analyzer.h # 语义分析器 │ └── plan_generator.h # 执行计划生成器 ├── src/ # 源文件 │ ├── common.cpp │ ├── ast.cpp │ ├── lexer.cpp │ ├── parser.cpp │ ├── semantic_analyzer.cpp │ ├── plan_generator.cpp │ └── main.cpp # 主程序 └── tests/ # 测试文件 ├── test_correct.sql # 正确SQL测试 └── test_errors.sql # 错误SQL测试 ``` ## 设计特点 1. **模块化设计**: 将编译器分为四个独立的模块,便于维护和扩展 2. **错误处理**: 每个阶段都有详细的错误检测和报告 3. **C++17特性**: 使用智能指针、auto关键字等现代C++特性 4. **可扩展性**: 易于添加新的SQL语句类型和数据类型 ## 实现细节 ### 词法分析 - 使用有限状态自动机识别Token - 支持关键字大小写不敏感 - 提供准确的位置信息用于错误报告 ### 语法分析 - 采用递归下降分析法 - 构建完整的抽象语法树 - 支持表达式的优先级处理 ### 语义分析 - 维护系统目录存储表结构信息 - 执行多种语义检查确保SQL语句的正确性 - 提供详细的错误信息 ### 执行计划生成 - 将AST转换为可执行的算子树 - 支持多种输出格式便于调试和分析 - 为后续的执行引擎提供接口 ## 扩展建议 1. 支持更多SQL语句:UPDATE、JOIN、ORDER BY、GROUP BY 2. 添加查询优化:谓词下推、连接重排序 3. 增强错误诊断:智能纠错提示 4. 支持更多数据类型:FLOAT、DATE、BOOLEAN 5. 实现完整的表达式求值系统