云原生时序数据库CnosDB引入了sqllogictest集成框架。通过将sqllogictest集成到CnosDB中,开发人员可以更轻松地测试和验证数据库的正确性,并能够快速地发现和解决潜在的问题。
近期,云原生时序数据库CnosDB合入新的PR,引入了Sqllogictest集成框架。通过将sqllogictest集成到CnosDB中,开发人员可以更轻松地测试和验证数据库的正确性,并能够快速地发现和解决潜在的问题。这个新的PR对于CnosDB有着重要的意义,为开发人员提供了更加高效和可靠的测试工具。CnosDB也成为首个集成sqllogictest的时序数据库,稳定性和可靠性再次升级。
关于sqllogictest:
sqllogictest是一个用来验证SQL数据库引擎是否计算出正确结果的集成测试框架,它可以执行各种SQL查询,包括对基本语法、函数、操作符和数据类型的支持进行测试。sqllogictest只关心查询结果的正确性,不关注数据库的性能,索引,事务,并发,内存,磁盘。
sqllogictest的主要功能是执行SQL查询,并比较预期结果与实际结果是否一致。该框架可以测试各种SQL查询,例如SELECT语句、INSERT语句、UPDATE语句、DELETE语句、CREATE TABLE语句等等。sqllogictest还可以验证SQL引擎是否支持各种数据类型、操作符和函数,并测试不同的查询语句是否具有预期的效果。
值得注意的是,sqllogictest只关注查询结果的正确性,而不考虑数据库的性能或其他方面。这意味着它不会测试查询的执行时间、索引的使用、并发性能或内存管理等方面。因此,sqllogictest主要用于确保SQL引擎能够正确地计算结果,而不是评估数据库的整体性能。
为什么CnosDB引入sqllogictest:
CnosDB技术团队一直以来都致力于为用户提供高稳定性和高可靠性的产品。为了实现这个目标,我们注重对查询引擎的逻辑测试,这是提升稳定性和可靠性的重中之重。【拓展阅读:CnosDB成为首个产品支持SQLancer的云原生时序数据库】通过引入sqllogictest,CnosDB团队发现可以获得以下收益:
首先,sqllogictest可以帮助回归测试,保证CnosDB产品的稳定性。回归测试是指检验软件原有功能在修改后是否保持完整。当社区开发者更改代码后,需要尽可能地保证不引入新Bug,已经修复好的Bug不再出现。通过使用sqllogictest,CnosDB团队能够快速有效地测试修改后的代码,以确保CnosDB产品保持稳定性。
其次,sqllogictest可以帮助开发人员进行SQL语句的正确性验证,找到数据库的逻辑错误。在开发过程中,开发人员需要经常编写SQL查询语句,确保查询结果正确无误。通过使用sqllogictest,开发人员可以对SQL查询进行逻辑测试,找到潜在的错误和问题,并在早期阶段修复这些问题。
第三,sqllogictest编写集成测试非常方便,易于查看。集成测试是指测试整个系统或应用程序的各个组件是否正常工作。通过使用sqllogictest,CnosDB团队可以轻松编写集成测试,以确保CnosDB的所有组件都可以协调工作,确保产品的完整性和一致性。
第四,sqllogictest是用Rust编程语言编写的,正好与CnosDB相同,这有助于Rust语言生态的发展。Rust是一种快速、安全和可靠的编程语言,与C++和C语言,可用于编写高性能的基础架构程序。CnosDB团队使用Rust编写CnosDB的原因是,它提供了更好的性能、安全性和可靠性。【拓展阅读:CnosDB 涅槃重生:弃用Go, 全面拥抱Rust】
最后,sqllogictest是一个成熟的开源项目,可以自由使用和修改,已经有很多基于SQL的数据库或框架在使用,比如DataFusion,它的稳定性和易用性已经得到了证明。通过使用sqllogictest,CnosDB团队可以获得开源社区的支持和帮助,提高产品的质量和可靠性。
使用sqllogictest 编写SQL测试:
下面介绍使用sqllogictest编写SQL测试的具体方法,测试文件使用.slt作为扩展名。
-
验证语句执行成功
statement ok
CREATE TABLE foo(a BIGINT, b BIGINT, TAGS(c));
statement ok
INSERT INTO TABLE foo(time, a, b, c) VALUES (1, 1, 1, '1'), (2, 2, 2, '2') ;
-
验证查询语句成功
query T
SELECT * FROM foo ORDER BY time;
----
1970-01-01T00:00:00.000000001 1 1 1
1970-01-01T00:00:00.000000002 2 2 2
T 表示比对结果集的文本。
-
验证语句执行失败
statement error Database .* forbid drop
DROP DATABASE public;
其中error 后面跟着的是正则表达式,用来匹配多样的错误信息
这样通过简单的配置,就可以快速使用sqllogicatest帮助大家检查SQL是否有逻辑错误。
更多使用方法可以查看https://github.com/cnosdb/cnosdb/tree/main/query_server/sqllogicaltests
https://github.com/risinglightdb/sqllogictest-rs
结语
以上就是CnosDB支持sqllogictest的全部内容了。对稳定性和可靠性的追求,对于CnosDB的技术团队来说永无止境。欢迎热爱数据库及数据库测试的小伙伴们关注我们微信公众号、B站视频号以及加入我们的社区,我们将及时更新最近技术动态与技术内幕,并期待与大家深入交流。
参考文献
GitHub - risinglightdb/sqllogictest-rs: Sqllogictest parser and runner in Rust.
参与 CnosDB 社区交流群:
扫描下方二维码,加入 CC 进入 CnosDB 社区交流,CC 也会在群内分享直播链接哒