Добавьте файлы проекта.
This commit is contained in:
38
SQLLinter/Infrastructure/Rules/JoinKeywordRule.cs
Normal file
38
SQLLinter/Infrastructure/Rules/JoinKeywordRule.cs
Normal file
@@ -0,0 +1,38 @@
|
||||
using Microsoft.SqlServer.TransactSql.ScriptDom;
|
||||
using SQLLinter.Common;
|
||||
|
||||
namespace SQLLinter.Infrastructure.Rules;
|
||||
|
||||
public class JoinKeywordRule : BaseRuleVisitor, IRule
|
||||
{
|
||||
|
||||
public override string Text => "Вместо неявного синтаксиса (соединения через запятую) следует использовать ключевое слово join. Замените соединения через запятую синтаксисом «INNER JOIN».";
|
||||
|
||||
public override void Visit(FromClause node)
|
||||
{
|
||||
// Проверьте, используются ли в соединении запятые (синтаксис неявного соединения).
|
||||
if (node.TableReferences.Count > 1)
|
||||
{
|
||||
for (int i = 0; i < node.TableReferences.Count; i++)
|
||||
{
|
||||
if (node.TableReferences[i] is QualifiedJoin)
|
||||
{
|
||||
// Пропустить, если это правильное ПРИСОЕДИНЕНИЕ
|
||||
continue;
|
||||
}
|
||||
if (i < node.TableReferences.Count - 1)
|
||||
{
|
||||
// Если следующая ссылка на таблицу не является соединением, это соединение через запятую.
|
||||
if (!(node.TableReferences[i + 1] is QualifiedJoin))
|
||||
{
|
||||
AddViolation(node);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
base.Visit(node);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user