Files
Umbraco-CMS/src/Umbraco.Core/Persistence/SqlContext.cs
2018-12-12 13:28:51 +01:00

71 lines
2.7 KiB
C#

using System;
using System.Linq;
using NPoco;
using Umbraco.Core.Persistence.Mappers;
using Umbraco.Core.Persistence.Querying;
using Umbraco.Core.Persistence.SqlSyntax;
namespace Umbraco.Core.Persistence
{
/// <summary>
/// Implements <see cref="ISqlContext"/>.
/// </summary>
public class SqlContext : ISqlContext
{
private readonly Lazy<IMapperCollection> _mappers;
/// <summary>
/// Initializes a new instance of the <see cref="SqlContext"/> class.
/// </summary>
/// <param name="sqlSyntax">The sql syntax provider.</param>
/// <param name="pocoDataFactory">The Poco data factory.</param>
/// <param name="databaseType">The database type.</param>
/// <param name="mappers">The mappers.</param>
public SqlContext(ISqlSyntaxProvider sqlSyntax, DatabaseType databaseType, IPocoDataFactory pocoDataFactory, IMapperCollection mappers = null)
: this(sqlSyntax, databaseType, pocoDataFactory, new Lazy<IMapperCollection>(() => mappers ?? new Mappers.MapperCollection(Enumerable.Empty<BaseMapper>())))
{ }
/// <summary>
/// Initializes a new instance of the <see cref="SqlContext"/> class.
/// </summary>
/// <param name="sqlSyntax">The sql syntax provider.</param>
/// <param name="pocoDataFactory">The Poco data factory.</param>
/// <param name="databaseType">The database type.</param>
/// <param name="mappers">The mappers.</param>
public SqlContext(ISqlSyntaxProvider sqlSyntax, DatabaseType databaseType, IPocoDataFactory pocoDataFactory, Lazy<IMapperCollection> mappers)
{
// for tests
_mappers = mappers;
SqlSyntax = sqlSyntax ?? throw new ArgumentNullException(nameof(sqlSyntax));
PocoDataFactory = pocoDataFactory ?? throw new ArgumentNullException(nameof(pocoDataFactory));
DatabaseType = databaseType ?? throw new ArgumentNullException(nameof(databaseType));
Templates = new SqlTemplates(this);
}
/// <inheritdoc />
public ISqlSyntaxProvider SqlSyntax { get; }
/// <inheritdoc />
public DatabaseType DatabaseType { get; }
/// <inheritdoc />
public Sql<ISqlContext> Sql() => NPoco.Sql.BuilderFor((ISqlContext) this);
/// <inheritdoc />
public Sql<ISqlContext> Sql(string sql, params object[] args) => Sql().Append(sql, args);
/// <inheritdoc />
public IQuery<T> Query<T>() => new Query<T>(this);
/// <inheritdoc />
public SqlTemplates Templates { get; }
/// <inheritdoc />
public IPocoDataFactory PocoDataFactory { get; }
/// <inheritdoc />
public IMapperCollection Mappers => _mappers.Value;
}
}