yang-db 0.1.2

个人使用数据库操作
Documentation
# UPDATE 和 DELETE 操作的基于属性测试


## 概述


本文档记录了为 MySQL 查询构建器的 UPDATE 和 DELETE 操作实现的基于属性测试。这些测试验证了 SQL 语句生成的正确性以及安全性保护机制。

## 实现的测试


### 1. 属性 16:UPDATE 语句生成


**测试函数**: `prop_update_statement_generation`

**验证需求**: 6.1

**测试目标**: 对于任意有效的数据对象和 WHERE 条件,调用 update() 方法时,生成的 SQL 应该是正确的 UPDATE table SET ... WHERE ... 语句

**验证内容**:
- SQL 以 UPDATE 开头
- 包含正确的表名
- 包含 SET 关键字
- 包含 WHERE 关键字
- 包含所有更新字段名
- 包含条件字段名
- 使用参数化查询(占位符数量正确)
- SQL 结构符合标准格式

**测试配置**: 100 次迭代

### 2. 属性 17:UPDATE 需要 WHERE 条件


**测试函数**: `prop_update_requires_where_clause`

**验证需求**: 6.3

**测试目标**: 对于任意没有 WHERE 条件的查询构建器,调用 update() 方法应该返回 MissingWhereClause 错误

**验证内容**:
- update() 操作返回错误
- 错误类型为 `DbError::MissingWhereClause`
- 防止意外的全表更新操作

**测试配置**: 100 次迭代

### 3. 属性 18:DELETE 语句生成


**测试函数**: `prop_delete_statement_generation`

**验证需求**: 7.1

**测试目标**: 对于任意有 WHERE 条件的查询构建器,调用 delete() 方法时,生成的 SQL 应该是正确的 DELETE FROM table WHERE ... 语句

**验证内容**:
- SQL 以 DELETE FROM 开头
- 包含正确的表名
- 包含 WHERE 关键字
- 包含条件字段名
- 使用参数化查询(占位符数量正确)
- SQL 结构符合标准格式
- WHERE 子句格式正确

**测试配置**: 100 次迭代

### 4. 属性 19:DELETE 需要 WHERE 条件


**测试函数**: `prop_delete_requires_where_clause`

**验证需求**: 7.3

**测试目标**: 对于任意没有 WHERE 条件的查询构建器,调用 delete() 方法应该返回 MissingWhereClause 错误

**验证内容**:
- delete() 操作返回错误
- 错误类型为 `DbError::MissingWhereClause`
- 防止意外的全表删除操作

**测试配置**: 100 次迭代

## 测试结果


所有 4 个新测试均已通过:

```
test property_tests::tests::prop_delete_statement_generation ... ok
test property_tests::tests::prop_delete_requires_where_clause ... ok
test property_tests::tests::prop_update_requires_where_clause ... ok
test property_tests::tests::prop_update_statement_generation ... ok
```

完整测试套件结果:**208 个测试全部通过**

## 代码质量检查


- `cargo test --lib`: 208 个测试通过
-`cargo clippy --lib -- -D warnings`: 无警告
-`cargo fmt --check`: 格式正确

## 安全性保护


这些测试验证了两个关键的安全性保护机制:

1. **防止全表更新**: UPDATE 操作必须包含 WHERE 条件,否则返回 `MissingWhereClause` 错误
2. **防止全表删除**: DELETE 操作必须包含 WHERE 条件,否则返回 `MissingWhereClause` 错误

这些保护机制确保开发者不会意外地修改或删除整个表的数据,提高了数据库操作的安全性。

## 测试覆盖范围


### UPDATE 测试覆盖

- 不同数量的更新字段(1-5 个)
- 不同数据类型(整数、字符串)
- 带 WHERE 条件的正常更新
- 无 WHERE 条件的错误处理

### DELETE 测试覆盖

- 不同的 WHERE 条件
- 不同的条件值范围
- 带 WHERE 条件的正常删除
- 无 WHERE 条件的错误处理

## 文件位置


测试代码位于:`lib_yang/crates/yang-db/src/property_tests.rs`

测试函数位于文件末尾,从第 2070 行开始。

## 相关任务


- ✅ 任务 14.3:UPDATE 语句生成测试
- ✅ 任务 14.4:UPDATE 需要 WHERE 条件测试
- ✅ 任务 15.3:DELETE 语句生成测试
- ✅ 任务 15.4:DELETE 需要 WHERE 条件测试

## 总结


本次实现成功为 UPDATE 和 DELETE 操作添加了全面的基于属性测试,验证了:

1. SQL 语句生成的正确性
2. 参数化查询的使用
3. 安全性保护机制的有效性
4. 错误处理的正确性

所有测试均通过 100 次迭代验证,确保在各种输入情况下的正确性。