39 lines
1.1 KiB
C#
39 lines
1.1 KiB
C#
using Microsoft.SqlServer.TransactSql.ScriptDom;
|
|
using SQLLinter.Common;
|
|
using SQLLinter.Common.Helpers;
|
|
|
|
namespace SQLLinter.Infrastructure.Rules;
|
|
|
|
public class DataCompressionOptionRule : BaseRuleVisitor
|
|
{
|
|
|
|
public override string Text => "Объявление таблицы без использования сжатия данных: {0}";
|
|
|
|
public override void Visit(CreateTableStatement node)
|
|
{
|
|
if (node.SchemaObjectName.BaseIdentifier.Value.StartsWith("#")) return;
|
|
|
|
var childCompressionVisitor = new ChildCompressionVisitor();
|
|
node.AcceptChildren(childCompressionVisitor);
|
|
|
|
if (!childCompressionVisitor.CompressionOptionExists)
|
|
{
|
|
AddViolation(node, SQLHelpers.ObjectGetFullName(node.SchemaObjectName));
|
|
}
|
|
}
|
|
|
|
private class ChildCompressionVisitor : TSqlFragmentVisitor
|
|
{
|
|
public bool CompressionOptionExists
|
|
{
|
|
get;
|
|
private set;
|
|
}
|
|
|
|
public override void Visit(DataCompressionOption node)
|
|
{
|
|
CompressionOptionExists = true;
|
|
}
|
|
}
|
|
}
|