7

我正在使用 Jenkins 和 SONARQUBE PL/SQL 插件进行 Oracle SQL 代码分析,我需要使用XPATH创建自定义规则,以便对发送以通过 Jenkins 进行部署的 SQL 脚本文件进行质量分析。

我正在尝试创建一个自定义规则,用于检测是否在任何 SQL 命令的末尾缺少分号 (" ; ")。SQL 终止(“分号”)对于使用 SQLPLUS 部署 SQL 脚本很重要。

代码示例

 insert into table_name values('wait','for','completion'); -- compliant with script 
 insert into table_name values('somename','for','good'); -- compliant with script 
 **insert into table_name values('someplace','for','game')** -- non compliant as semicolon missing
 insert into table_name values('something','for','change'); -- compliant with script 
 delete from table_name ; -- compliant with script 
 delete from table_name ; -- compliant with script 
 update table_name set name='james' where id='22';

有一个插入查询缺少分号,因此 sonarqube 应该检测到这一点,并且 jenkins 构建失败或 SONAR 质量测试失败。

请帮助创建 PLSQL 自定义规则,以通过分号检测正确的 SQL 终止。

xpath 的示例是: /COMPILATION_UNIT/ANY_DML_EXPRESSION/following-sibling::SEMICOLON——类似这样

4

2 回答 2

3

您可以使用模板项目遵循指南“使用自定义规则创建插件plsql-custom-rules” 。
这比向 XPATH 添加规则更复杂,但您将拥有更多控制权。

要创建支票,您可以创建org.sonar.plsqlopen.checks.AbstractBaseCheck.
您可以使用org.sonar.check.Ruleorg.sonar.squidbridge.annotations.SqaleConstantRemediation注释来配置检查元数据(名称、描述、密钥...)。

很多时候你只需要重写两个方法:

  • init():订阅所需的语法规则
  • visitNode(AstNode):分析与订阅的语法规则匹配的节点

但首先,如问题 21中所示,请检查您的代码是否不会因“无法解析文件”消息而出错。

我只需要知道像 sonarqube 分析这样的解析器来检测脚本文件中的编译错误

检查您的情况是否不是可选的分号,如“分号不需要CREATE VIEW”。
查看该源代码是检查解析器(如 sonarqube 分析)如何检测脚本文件中的编译错误的好方法。

于 2018-06-08T04:52:34.230 回答
0

我们过去一直在使用它,稍作修改。您可以从在此处实现相同逻辑的规则开始:

https://github.com/gretard/sonar-tsql-plugin/wiki/Custom-rules#creating-more-complex-custom-rule-with-distance

于 2018-06-12T01:31:24.147 回答