using System;
namespace Umbraco.Core.Persistence.SqlSyntax
{
///
/// Singleton to handle the configuration of a SqlSyntaxProvider
///
public static class SqlSyntaxContext
{
private static ISqlSyntaxProvider _sqlSyntaxProvider;
public static ISqlSyntaxProvider SqlSyntaxProvider
{
get
{
if(_sqlSyntaxProvider == null)
{
throw new ArgumentNullException("SqlSyntaxProvider",
"You must set the singleton 'Umbraco.Core.Persistence.SqlSyntax.SqlSyntaxContext' to use an sql syntax provider");
}
return _sqlSyntaxProvider;
}
set { _sqlSyntaxProvider = value; }
}
}
internal static class SqlSyntaxProviderExtensions
{
///
/// This is used to generate a delete query that uses a sub-query to select the data, it is required because there's a very particular syntax that
/// needs to be used to work for all servers: MySql, SQLCE and MSSQL
///
///
///
/// See: http://issues.umbraco.org/issue/U4-3876
///
public static string GetDeleteSubquery(this ISqlSyntaxProvider sqlProvider, string tableName, string columnName, Sql subQuery)
{
return string.Format(@"DELETE FROM {0} WHERE {1} IN (SELECT {1} FROM ({2}) x)",
sqlProvider.GetQuotedTableName(tableName),
sqlProvider.GetQuotedColumnName(columnName),
subQuery.SQL);
}
}
}