Files
SQLLint/SQLLinter/Infrastructure/Rules/JoinKeywordRule.cs

39 lines
1.6 KiB
C#

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);
}
}