您好!
欢迎来到京东云开发者社区
登录
首页
博文
课程
大赛
工具
用户中心
开源
首页
博文
课程
大赛
工具
开源
更多
用户中心
开发者社区
>
博文
>
测试引擎——SQL解析/改写测试引擎
分享
打开微信扫码分享
点击前往QQ分享
点击前往微博分享
点击复制链接
测试引擎——SQL解析/改写测试引擎
Apache ShardingSphere
2021-01-19
IP归属:未知
41920浏览
# SQL解析测试引擎 ## 数据准备 SQL解析不需要真实的测试环境,开发者只需定义好待测试的SQL,以及解析后的断言数据即可: ### SQL数据 在集成测试的部分提到过`sql-case-id`,其对应的SQL,可以在不同模块共享。开发者只需要在`/sharding-sql-test/src/main/resources/sql/sharding/SQL-TYPE/*.xml` 添加待测试的SQL即可。 ### 断言解析数据 断言的解析数据保存在 `/sharding-core/sharding-core-parse/sharding-core-parse-test/src/test/resources/sharding/SQL-TYPE/*.xml` 在`xml`文件中,可以针对表名,token,SQL条件等进行断言,例如如下的配置: ```xml <parser-result-sets> <parser-result sql-case-id="insert_with_multiple_values"> <tables> <table name="t_order" /> </tables> <tokens> <table-token start-index="12" table-name="t_order" length="7" /> </tokens> <sharding-conditions> <and-condition> <condition column-name="order_id" table-name="t_order" operator="EQUAL"> <value literal="1" type="int" /> </condition> <condition column-name="user_id" table-name="t_order" operator="EQUAL"> <value literal="1" type="int" /> </condition> </and-condition> <and-condition> <condition column-name="order_id" table-name="t_order" operator="EQUAL"> <value literal="2" type="int" /> </condition> <condition column-name="user_id" table-name="t_order" operator="EQUAL"> <value literal="2" type="int" /> </condition> </and-condition> </sharding-conditions> </parser-result> </parser-result-sets> ``` 设置好上面两类数据,开发者就可以通过 `sharding-core-parse-test` 下对应的engine启动SQL解析的测试了。 # SQL改写测试引擎 ## 目标 面向逻辑库与逻辑表书写的SQL,并不能够直接在真实的数据库中执行,SQL改写用于将逻辑SQL改写为在真实数据库中可以正确执行的SQL。 它包括正确性改写和优化改写两部分,所以 SQL 改写的测试都是基于这些改写方向进行校验的。 ### 测试 SQL 改写测试用例位于 `sharding-core/sharding-core-rewrite` 下的 test 中。SQL 改写的测试主要依赖如下几个部分: - 测试引擎 - 环境配置 - 验证数据 测试引擎是 SQL 改写测试的入口,跟其他引擎一样,通过 Junit 的 [Parameterized](https://github.com/junit-team/junit4/wiki/Parameterized-tests) 逐条读取 `test\resources` 目录中测试类型下对应的 xml 文件,然后按读取顺序一一进行验证。 环境配置存放在 `test\resources\yaml` 路径中测试类型下对应的 yaml 中。配置了dataSources,shardingRule,encryptRule 等信息,例子如下: ```yaml dataSources: db: !!com.zaxxer.hikari.HikariDataSource driverClassName: org.h2.Driver jdbcUrl: jdbc:h2:mem:db;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false;MODE=MYSQL username: sa password: ## sharding 规则 rules: - !SHARDING tables: t_account: actualDataNodes: db.t_account_${0..1} tableStrategy: standard: shardingColumn: account_id shardingAlgorithmName: account_table_inline keyGenerateStrategy: column: account_id keyGeneratorName: snowflake t_account_detail: actualDataNodes: db.t_account_detail_${0..1} tableStrategy: standard: shardingColumn: order_id shardingAlgorithmName: account_detail_table_inline bindingTables: - t_account, t_account_detail shardingAlgorithms: account_table_inline: type: INLINE props: algorithm-expression: t_account_${account_id % 2} account_detail_table_inline: type: INLINE props: algorithm-expression: t_account_detail_${account_id % 2} keyGenerators: snowflake: type: SNOWFLAKE props: worker-id: 123 ``` 验证数据存放在 `test\resources` 路径中测试类型下对应的 xml 文件中。验证数据中, `yaml-rule` 指定了环境以及 rule 的配置文件,`input` 指定了待测试的 SQL 以及参数,`output` 指定了期待的 SQL 以及参数。 其中 `db-type` 决定了 SQL 解析的类型,默认为 `SQL92`, 例如: ```xml <rewrite-assertions yaml-rule="yaml/sharding/sharding-rule.yaml"> <!-- 替换数据库类型需要在这里更改 db-type --> <rewrite-assertion id="create_index_for_mysql" db-type="MySQL"> <input sql="CREATE INDEX index_name ON t_account ('status')" /> <output sql="CREATE INDEX index_name ON t_account_0 ('status')" /> <output sql="CREATE INDEX index_name ON t_account_1 ('status')" /> </rewrite-assertion> </rewrite-assertions> ``` 只需在 xml 文件中编写测试数据,配置好相应的 yaml 配置文件,就可以在不更改任何 Java 代码的情况下校验对应的 SQL 了。
原创文章,需联系作者,授权转载
上一篇:测试引擎——性能测试
下一篇:测试引擎——整合测试引擎
Apache ShardingSphere
文章数
96
阅读量
231327
作者其他文章
01
突破关系型数据库桎梏:云原生数据库中间件核心剖析
数据库技术的发展与变革方兴未艾,NewSQL的出现,只是将各种所需技术组合在一起,而这些技术组合在一起所实现的核心功能,推动着云原生数据库的发展。 NewSQL的三种分类中,新架构和云数据库涉及了太多与数据库相关的底层实现,为了保证本文的范围不至太过发散,我们重点介绍透明化分片数据库中间件的核心功能与实现原理,另外两种类型的NewSQL在核心功能上类似,但实现原理会有所差别。
01
Apache ShardingSphere数据脱敏全解决方案详解(上)
Apache ShardingSphere针对新业务上线、旧业务改造分别提供了相应的全套脱敏解决方案。
01
Shardingsphere整合Narayana对XA分布式事务的支持(4)
ShardingSphere对于XA方案,提供了一套SPI解决方案,对Narayana进行了整合,Narayana初始化流程,开始事务流程,获取连接流程,提交事务流程,回滚事务流程。
01
从中间件到分布式数据库生态,ShardingSphere 5.x革新变旧
5.x 是 Apache ShardingSphere从分库分表中间件向分布式数据库生态转化的里程碑,从 4.x 版本后期开始打磨的可插拔架构在 5.x 版本已逐渐成型,项目的设计理念和 API 都进行了大幅提升。欢迎大家测试使用!
最新回复
丨
点赞排行
共0条评论
Apache ShardingSphere
文章数
96
阅读量
231327
作者其他文章
01
突破关系型数据库桎梏:云原生数据库中间件核心剖析
01
Apache ShardingSphere数据脱敏全解决方案详解(上)
01
Shardingsphere整合Narayana对XA分布式事务的支持(4)
01
从中间件到分布式数据库生态,ShardingSphere 5.x革新变旧
添加企业微信
获取1V1专业服务
扫码关注
京东云开发者公众号