using System; using System.Collections.Generic; using System.Linq; using Umbraco.Core.Logging; using Umbraco.Core.ObjectResolution; namespace Umbraco.Core.Persistence.SqlSyntax { /// /// Used to return the correct syntax provider for a given provider name /// public sealed class SqlSyntaxProviders { private readonly IEnumerable _syntaxProviders; internal static SqlSyntaxProviders CreateDefault(ILogger logger) { return new SqlSyntaxProviders(new ISqlSyntaxProvider[] { new MySqlSyntaxProvider(logger), new SqlCeSyntaxProvider(), new SqlServerSyntaxProvider() }); } /// /// Constructor /// /// public SqlSyntaxProviders(IEnumerable syntaxProviders) { if (syntaxProviders == null) throw new ArgumentNullException("syntaxProviders"); _syntaxProviders = syntaxProviders; } /// /// Gets a by its attributed provider. /// /// ProviderName from the ConnectionString settings /// that corresponds to the attributed provider or the default Sql Server Syntax Provider. public ISqlSyntaxProvider GetByProviderNameOrDefault(string providerName) { var provider = _syntaxProviders.FirstOrDefault( x => x.GetType() .FirstAttribute() .ProviderName.ToLowerInvariant() .Equals(providerName.ToLowerInvariant())); if (provider != null) return provider; //default return _syntaxProviders.First(x => x.GetType() == typeof(SqlServerSyntaxProvider)); } } }