You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

65 lines
2.5 KiB

using OpenDBDiff.Schema.Model;
using System;
using System.Collections.Generic;
using System.Linq;
namespace OpenDBDiff.Schema.SQLServer.Generates.Options
{
public class SqlOptionFilter : IOptionFilter
{
public SqlOptionFilter()
{
Items = new List<SqlOptionFilterItem>
{
new SqlOptionFilterItem(ObjectType.Table, "dbo.dtproperties"),
new SqlOptionFilterItem(ObjectType.Assembly, "Microsoft.SqlServer.Types"),
new SqlOptionFilterItem(ObjectType.Schema, "db_accessadmin"),
new SqlOptionFilterItem(ObjectType.Schema, "db_backupoperator"),
new SqlOptionFilterItem(ObjectType.Schema, "db_datareader"),
new SqlOptionFilterItem(ObjectType.Schema, "db_datawriter"),
new SqlOptionFilterItem(ObjectType.Schema, "db_ddladmin"),
new SqlOptionFilterItem(ObjectType.Schema, "db_denydatareader"),
new SqlOptionFilterItem(ObjectType.Schema, "db_denydatawriter"),
new SqlOptionFilterItem(ObjectType.Schema, "db_owner"),
new SqlOptionFilterItem(ObjectType.Schema, "db_securityadmin"),
//new SqlOptionFilterItem(ObjectType.Schema, "dbo"),
new SqlOptionFilterItem(ObjectType.Schema, "guest"),
new SqlOptionFilterItem(ObjectType.Schema, "INFORMATION_SCHEMA"),
new SqlOptionFilterItem(ObjectType.Schema, "sys")
};
}
public SqlOptionFilter(IOptionFilter optionFilter)
{
Items = new List<SqlOptionFilterItem>();
var options = optionFilter.GetOptions();
foreach (var pair in options)
{
Items.Add(
new SqlOptionFilterItem(
objectType: (ObjectType)Enum.Parse(typeof(ObjectType), pair.Value, true),
filterPattern: pair.Key
)
);
}
}
public IList<SqlOptionFilterItem> Items { get; private set; }
public IDictionary<string, string> GetOptions()
{
Dictionary<string, string> values = new Dictionary<string, string>();
for (int i = 0; i < Items.Count; i++)
{
values.Add(Items[i].FilterPattern, Items[i].ObjectType.ToString());
}
return values;
}
public bool IsItemIncluded(ISchemaBase item)
{
return !Items.Any(i => i.IsMatch(item));
}
}
}