主要观点:作者通过在 Rust 项目 bors 中的经历,强调 Rust 引导其做“正确的事”,并讲述了修复 SQL 迁移导致的 bot 部署问题及后续采取的措施。
关键信息:
- Google Summer of Code 2025 临近,众多新贡献者向 Rust 项目发送 pull 请求,bors 是其中热门项目。
- 作者审查并合并了 bors 的数十个 PR,但发现一些 PR 导致 bot 部署出错。
- 问题出在一个 SQL 迁移语句
ALTER TABLE foo ADD COLUMN bar NOT NULL;
,未给已有行提供默认值。 - 现有测试套件未检测到该问题,因为它从空数据库开始。
- 作者在 bors 开发指南中添加警告,敦促人们不要这样写迁移,但意识到仅靠文档效果不佳。
- 借助
sqlparser
crate 编写集成测试,遍历migrations
目录,解析 SQL 文件并检测添加NOT NULL
列而无默认值的情况。 - 测试代码简单有效,约 10 分钟从思考能否解析 SQL 到得到工作测试,仅使用之前未用过的 crate 且未读太多文档。
- 修复和测试在此 PR中,还考虑了其他测试方法。
重要细节: sqlparser
crate 仅约有三个小依赖,编译快,支持Visitor
模式使实现容易。- 测试代码通过遍历
migrations
目录下的 SQL 文件,解析并检查NOT NULL
列无默认值的情况。 - 作者提到自己的编程经验让其尽量避免类似问题再次发生,且对在 Rust 中能轻松做到这些感到惊讶。
- 最后鼓励人们遇到问题时尝试写测试,即使起初觉得麻烦。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。