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