Sonarqube PLSQL Пользовательское правило для определения правильной точки с запятой в SQL-файле сценария SQL

Я использую плагин Jenkins и SONARQUBE PL/SQL для анализа кода Oracle SQL, мне нужно создать пользовательские правила, используя XPATH для анализа качества файлов сценариев SQL, которые отправляются для развертывания через Jenkins.

Я пытаюсь создать пользовательское правило, которое определяет, если точка с запятой ("; ") отсутствует в конце какой-либо команды SQL. Завершение SQL ("точка с запятой") имеет важное значение для развертывания сценариев SQL с помощью SQLPLUS.

пример кода

 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 / follow-sibling::SEMICOLON - что-то вроде этого

2 ответа

Вы можете следовать руководству " Создание плагина с пользовательскими правилами ", используя шаблон проекта plsql-custom-rules,
Это сложнее, чем добавить правило в XPATH, но у вас будет больше контроля.

Чтобы создать чек, вы можете создать подкласс org.sonar.plsqlopen.checks.AbstractBaseCheck,
Вы можете использовать org.sonar.check.Rule а также org.sonar.squidbridge.annotations.SqaleConstantRemediation аннотации для настройки метаданных проверки (имя, описание, ключ...).

Очень часто вам нужно переопределить только два метода:

  • init(): подписаться на желаемые правила грамматики
  • visitNode(AstNode): проанализировать узлы, которые соответствуют подписанным правилам грамматики

Но сначала, как показано в выпуске 21, убедитесь, что ваш код не содержит ошибок с сообщением "Невозможно разобрать файл".

Мне просто нужно знать такой анализатор, как sonarqube analysis, чтобы обнаружить ошибки компиляции в файле скрипта

Убедитесь, что ваш случай не является дополнительной точкой с запятой, так как в " Точка с запятой не требуется в CREATE VIEW ".
Просмотр этого исходного кода - хороший способ проверить, как анализатор, например анализ sonarqube, обнаруживает ошибки компиляции в файле сценария.

Мы использовали его в прошлом, с небольшой модификацией. Вы можете начать с правила, которое реализует ту же логику здесь:

https://github.com/gretard/sonar-tsql-plugin/wiki/Custom-rules

Другие вопросы по тегам