40 lines
989 B
C#
40 lines
989 B
C#
using Microsoft.SqlServer.TransactSql.ScriptDom;
|
|
using SQLLinter.Common;
|
|
|
|
namespace SQLLinter.Infrastructure.Rules;
|
|
|
|
public class SelectStarRule : BaseRuleVisitor, IRule
|
|
{
|
|
private int expressionCounter;
|
|
|
|
public override string Text => "Ожидаются имена столбцов в SELECT";
|
|
|
|
public override void Visit(ExistsPredicate node)
|
|
{
|
|
var childVisitor = new ChildVisitor();
|
|
node.AcceptChildren(childVisitor);
|
|
expressionCounter += childVisitor.SelectStarExpressionCount;
|
|
}
|
|
|
|
public override void Visit(SelectStarExpression node)
|
|
{
|
|
if (expressionCounter > 0)
|
|
{
|
|
expressionCounter--;
|
|
return;
|
|
}
|
|
|
|
AddViolation(node);
|
|
}
|
|
|
|
public class ChildVisitor : TSqlFragmentVisitor
|
|
{
|
|
public int SelectStarExpressionCount { get; set; }
|
|
|
|
public override void Visit(SelectStarExpression node)
|
|
{
|
|
SelectStarExpressionCount++;
|
|
}
|
|
}
|
|
}
|